[英]Java JComboBox in table not displaying before cell clicked
好的,所以我有一个表设置,其中已按照此处示例中的操作在其中添加了一个JComboBox到特定的单元格,但是由于某种原因,直到选择了该单元格,组合框才会显示。 如果我选择该单元格,则组合框会打开它的列表供我选择。 无论是否更改选择,如果单击表中的另一个单元格,它就会显示从组合框中选择的项目的文本,就好像它是根据需要在表中显示的简单字符串一样。
我的问题是:如何获取它以显示JComboBox中的选定值而不必先选择该单元格?
编辑:我忘记提到的一件事是; 与其像以前那样事先声明DefaultTableModel data
, model.addRow();
稍后使用model.addRow();
将项目添加到DTM中model.addRow();
这是正常的行为。 表格使用渲染器和编辑器。 单元的默认渲染器只是一个JLabel,因此您看到的只是文本。 当您单击单元格时,将调用编辑器,因此您会看到组合框。
如果您希望即使不对其进行编辑时该单元格仍看起来像一个组合框,则需要为该列创建一个组合框渲染器。
阅读Swing教程中有关使用自定义渲染器的部分,以获取更多信息。
您可以尝试创建自己的渲染器,如本例所示。
public void example(){
TableColumn tmpColum =table.getColumnModel().getColumn(1);
String[] DATA = { "Data 1", "Data 2", "Data 3", "Data 4" };
JComboBox comboBox = new JComboBox(DATA);
DefaultCellEditor defaultCellEditor=new DefaultCellEditor(comboBox);
tmpColum.setCellEditor(defaultCellEditor);
tmpColum.setCellRenderer(new CheckBoxCellRenderer(comboBox));
table.repaint();
}
/**
Custom class for adding elements in the JComboBox.
*/
class CheckBoxCellRenderer implements TableCellRenderer {
JComboBox combo;
public CheckBoxCellRenderer(JComboBox comboBox) {
this.combo = new JComboBox();
for (int i=0; i<comboBox.getItemCount(); i++){
combo.addItem(comboBox.getItemAt(i));
}
}
public Component getTableCellRendererComponent(JTable jtable,
Object value,
boolean isSelected,
boolean hasFocus,
int row, int column) {
combo.setSelectedItem(value);
return combo;
}
}
或者您可以像本示例一样自定义默认的Renderer。
final JComboBox combo = new JComboBox(items);
TableColumn col = table.getColumnModel().getColumn(ITEM_COL);
col.setCellRenderer(new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = (JLabel) super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
label.setIcon(UIManager.getIcon("Table.descendingSortIcon"));
return label;
}
});
第一个示例使该单元格在单击后看起来像JComboBox。 第二个示例向JComboCox添加一个箭头图标,以展示JComboBox是可单击的。 我使用了第二个示例,结果可以在这里看到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.