Добавление Кнопок в ячейке JTable наряду с данными?

Действительно ли возможно добавить кнопки в ячейке JTable наряду с данными? То, что я пытаюсь сделать, должно составить таблицу со столбцами, которые отображают данные (число) от базы данных и две кнопки для увеличиваний/уменьшения числа в той же ячейке.

|ID | Количество |
|06 | 2 [+][-] |

это было бы что-то как вышеупомянутое с [+][-] быть кнопками. Таким образом, когда я нажимаю [+], число изменится на 3 и 1 при нажатии [-].

9
задан Todd 15 January 2010 в 05:11
поделиться

3 ответа

Да, возможно, хотя это не будет легко.

Вы должны написать собственные пользовательские рендерер и свой собственный редактор редактора элементов .

Это образец, который я сделал через 5 минут:

sample

Это далеко не идеально, но показывает концепцию.

Вот исходный код:

import java.awt.Component;
import java.awt.Font;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.Dimension;

public class CustomCell {
    public static void main( String [] args ) { 
        Object [] columnNames = new Object[]{ "Id", "Quantity" };
        Object [][] data        = new Object[][]{ {"06", 1}, {"08", 2} };

        JTable table = new JTable( data, columnNames ) { 
            public TableCellRenderer getCellRenderer( int row, int column ) {
                return new PlusMinusCellRenderer();
            }
         };

        table.setRowHeight( 32 );
        showFrame( table );
    }

    private static void showFrame( JTable table ) {
        JFrame f = new JFrame("Custom Cell Renderer sample" );
        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        f.add( new JScrollPane( table ) );
        f.pack();
        f.setVisible( true );
    }
}

class PlusMinusCellRenderer extends JPanel implements TableCellRenderer {
        public Component getTableCellRendererComponent(
                            final JTable table, Object value,
                            boolean isSelected, boolean hasFocus,
                            int row, int column) {
                this.add( new JTextField( value.toString()  ) );
                this.add( new JButton("+"));
                this.add( new JButton("-"));
                return this;
        }
}

Вот нить, которая может быть интересным и здесь .

15
ответ дан 4 December 2019 в 12:18
поделиться

Это должно надежно привести к SigBus на системе, совместимой POSIX.

#include <unistd.h>
#include <stdio.h>
#include <sys/mman.h>
int main() {
    FILE *f = tmpfile();
    int *m = mmap(0, 4, PROT_WRITE, MAP_PRIVATE, fileno(f), 0);
    *m = 0;
    return 0;
}

Из одной спецификации UNIX MMAP :

ссылки в диапазоне адресов, начиная с PA и продолжение len на целые страницы после Конец объекта должен привести к доставке сигнала SIGBUS.

-121--2370485-

Как обсуждалось в руководстве , вам понадобится как рендерер, чтобы отобразить ваше значение, и редактор для обнаружения событий из редактирования ячейки. В этом примером компонент - это jcheckbox . Обратите внимание, что для этого требуется пользовательский Datamodel , который расширяется ABSOLTABLEMODEL для снабжения правильного класса для данного столбца. Предложение Joonas для использования Jspinner - хороший, который работает хорошо.

1
ответ дан 4 December 2019 в 12:18
поделиться

Я думаю, вам нужно создать пользовательский визуализатор Cell, если вы хотите показать что-нибудь еще, чем текст (или цифры) в ячейке. Работа рендерера состоит в том, чтобы рисовать все, что вам нужно, чтобы показать в ячейке.

См. Документация Документация по подключению таблицы .

Так что в этом случае вы можете создать небольшую JPANE, которая содержит текстовое поле и крошечные + и - кнопки - или просто компонент JSPinner, если делает то, что вам нужно. Немного сложно, наверняка, но должно быть возможно.

1
ответ дан 4 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: