在JTable的每一行中放置不同的JComboBox可以通过自定义TableCellRenderer和TableCellEditor来实现。下面是一个实现的步骤:
class ComboBoxRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value != null) {
JComboBox comboBox = new JComboBox((Object[]) value);
return comboBox;
}
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
class ComboBoxEditor extends DefaultCellEditor {
public ComboBoxEditor(Object[] items) {
super(new JComboBox(items));
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
JComboBox comboBox = (JComboBox) super.getTableCellEditorComponent(table, value, isSelected, row, column);
comboBox.setSelectedItem(value);
return comboBox;
}
}
JTable table = new JTable(data, columnNames);
table.getColumnModel().getColumn(columnIndex).setCellRenderer(new ComboBoxRenderer());
table.getColumnModel().getColumn(columnIndex).setCellEditor(new ComboBoxEditor(items));
其中,data是表格的数据模型,columnNames是列名数组,columnIndex是需要放置JComboBox的列的索引,items是一个数组,包含了每一行中不同的JComboBox的选项。
这样,每一行中的JComboBox就可以根据需要动态地显示不同的选项了。
领取专属 10元无门槛券
手把手带您无忧上云