Thu*_*rge 5 java swing jtable jcombobox
在Swing中可以在JTable中创建一个JComboBox,如本指南所示.他们有一张可爱的图片,展示了这一点:

但是,未能显示的是,如果您没有单击该单元格,则下拉箭头不可见,它看起来像普通文本标签,如下所示:

您可以看到针织有下拉箭头,因为我只是点击它,但其他人没有.遗憾的是,这并不理想,因为没有视觉提示可以单击单元格来显示选项列表.换句话说,"Sport"列看起来与"Last Name"列相同.其中一个是下拉列表,另一个不是,但它们在视觉上看起来相同,除非您碰巧点击其中一个.
有什么办法可以在Swing中完成吗?
编辑:澄清一下,我想要的是"运动"栏中的所有单元格都有箭头指示下拉菜单,即使它们不是最少点击的.基本上,我希望它看起来像一个组合框,无论我是否点击它.
我不确定你是否理解"渲染器"和"编辑"模式之间的区别JTable.Sport在编辑模式下,示例中列中的所有单元格都由组合框支持.
我相信你想要做的就是......

这会弄脏UI(恕我直言)
因此,基于此处的示例,我修改了代码以更改Sport列的默认单元格渲染器
public void setUpSportColumn(JTable table,
TableColumn sportColumn) {
//Set up the editor for the sport cells.
JComboBox comboBox = new JComboBox();
DefaultComboBoxModel model = new DefaultComboBoxModel();
model.addElement("Snowboarding");
model.addElement("Rowing");
model.addElement("Knitting");
model.addElement("Speed reading");
model.addElement("Pool");
model.addElement("None of the above");
comboBox.setModel(model);
sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
model = new DefaultComboBoxModel();
model.addElement("Snowboarding");
model.addElement("Rowing");
model.addElement("Knitting");
model.addElement("Speed reading");
model.addElement("Pool");
model.addElement("None of the above");
//Set up tool tips for the sport cells.
ComboBoxTableCellRenderer renderer
= new ComboBoxTableCellRenderer();
renderer.setModel(model);
sportColumn.setCellRenderer(renderer);
}
Run Code Online (Sandbox Code Playgroud)
并添加了这个......
public class ComboBoxTableCellRenderer extends JComboBox implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setSelectedItem(value);
return this;
}
}
Run Code Online (Sandbox Code Playgroud)