могу ли я добавить поле со списком в определенную ячейку JTable?

StackOverflow https://stackoverflow.com/questions/2543554

  •  23-09-2019
  •  | 
  •  

Вопрос

Я хочу добавить поле со списком в ячейку JTable.

model=new DefaultTableModel(data,col);
JTableHeader head=new JTableHeader();
head.setBackground(Color.BLUE);
table=new JTable(model);
table.add(head);
JComboBox combo = new JComboBox();
combo.addItem("Names");
combo.addItem("Antony");
combo.addItem("Victor");
combo.addItem("Ramkumar");
table.add(combo);

Но я не могу получить поле со списком в ячейке.Можно ли установить поле со списком?

Это было полезно?

Решение

Вам необходимо установить TableCellEditor для JTable.Лучше поискать в учебниках по Java, но вот краткое объяснение.

JTable использует для работы три основных класса:

1) Модель таблицы:его функция состоит в том, чтобы сказать, сколько строк и столбцов имеет таблица, и обслуживать данные таблицы. Основные методы — getValue(row,col) и setValue(value, row,col).И запускайте события, чтобы уведомить о перерисовке JTable.

2) TableCellRenderer:его основная цель - отрисовать компоненты в ячейках JTable.Эти компоненты окрашены только:НЕ РАБОТА!если вы нарисуете JComboBox, он не будет отключен, если вы нажмете на него, или если вы нарисуете JCheckbox, он не будет выбран/отменен выбор.

3) Редактор TableCell:его основная цель - нарисовать компонент внутри JTableCell для редактирования значения ячейки.Он получает события и решает, когда начать редактирование, затем вызывается метод getTableCellEditorComponent для возврата компонента редактора.Возвращаемый компонент должен запускать события, чтобы TableCellEditor знал, когда остановить редактирование, получить значение и использовать его для вызова TableModel.setvalue...или отменить редактирование.

Чтобы отобразить JComboBox в JTable, вам необходимо создать собственный TableCellEditor, а это непростая задача, если вы не делали этого раньше.

Другие советы

Взгляни на этоУчебник по Java и найдите на этой странице «Использование поля со списком в качестве редактора».

Попробуй это:у меня это работает... щелкните ячейку, чтобы увидеть поле со списком.

 private void comboloader() {
        try {
            TableColumn gradeColumn = jTable1.getColumnModel().getColumn(0);
            JComboBox comboBox = new JComboBox();

            comboBox.removeAllItems();

            try {
                comboBox.addItem("Item 1");
                comboBox.addItem("Item 2");
                comboBox.addItem("Item 3");

            } catch (NullPointerException e) {
            } catch (Exception e) {
                e.printStackTrace();
            }
            gradeColumn.setCellEditor(new DefaultCellEditor(comboBox));
        } catch (Exception e) {
        }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top