Помещение JComboBox в JTable

15
задан Laurel 8 July 2016 в 22:46
поделиться

6 ответов

Самый легкий путь состоит в том, чтобы реализовать Ваше собственное Загрузка TableModel

public class MyModel extends AbstractTableModel {
    List rows;

    public int getRowCount() {
        return rows.size();
    }

    public int getColumnCount() {
         return 4;
    }

    public Object getValueAt(int row, int column) {
        return rows.get(row).getCol(col);  //assuming your row "Object" has a getCol()
    }

    public Class<?> getColumnClass(int col) {
        return Boolean.class;
    }

    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        rows.get(rowIndex).getCol(columnIndex).setValue(aValue);
    }

}

это в Вас JTable. Если Вы не заменили рендерер ячейки по умолчанию для булевской переменной, все Вы, ячейки будут представлены как флажки благодаря Вам реализация getColumnClass (). Весь ввод данных пользователем к этим флажкам собран с нашим setValueAt ().

-8
ответ дан 1 December 2019 в 04:53
поделиться

Необходимо переопределить:

Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)

... в TableCellEditor. Значение, переданное в к этому методу, - то, что можно вставить JComboBox. Это означает, что 'значение', для которого конкретная ячейка должна быть чем-то, что может быть переведено в набор. Это мог потенциально просто быть Список объектов, или это мог быть POJO с полями, которые могли быть превращены в JComboBox.

Поэтому просто редактирование MyComboBoxEditor, чтобы переопределить тот метод и изменить Вашу модель для обеспечения Объекта, который на самом деле представляет несколько других объектов.

2
ответ дан 1 December 2019 в 04:53
поделиться

Эта страница могла бы помочь Вам, хотя кажется, что Вы ограничиваетесь наличием того же поля комбинированного списка во всех ячейках в столбце.

0
ответ дан 1 December 2019 в 04:53
поделиться

Необходимо создать подкласс JTable для переопределения метода TableCellEditor getCellEditor (международная строка, международный столбец).

Это позволяет Вам установить произвольных редакторов ячейки для любой строки и комбинации столбца. Путь по умолчанию состоит в том, чтобы установить редактора ячейки для всего столбца.

(Можно также установить рендереры отдельной ячейки путем переопределения getCellRenderer.)

0
ответ дан 1 December 2019 в 04:53
поделиться

Расширьте JTable с помощью этого кода:

@Override
public TableCellEditor getCellEditor(int row, int column) {
   Object value = super.getValueAt(row, column);
   if(value != null) {
      if(value instanceof JComboBox) {
           return new DefaultCellEditor((JComboBox)value);
      }
            return getDefaultEditor(value.getClass());
   }
   return super.getCellEditor(row, column);
}

Это создаст уникальный редактор ячеек JComboBox для каждого поля со списком, для которого вы получаете значение a.

9
ответ дан 1 December 2019 в 04:53
поделиться
@Override
public TableCellEditor getCellEditor(int row, int column) {
   Object value = super.getValueAt(row, column);
   if(value != null) {
      if(value instanceof JComboBox) {
           return new DefaultCellEditor((JComboBox)value);
      }
            return getDefaultEditor(value.getClass());
   }
   return super.getCellEditor(row, column);
}

Затем переопределите метод toString из JComboBox .

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

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