在Swing中可以在JTable中创建一个JComboBox,如Oracle this guide所示。他们有一张可爱的照片,显示了这一点:
然而,未能显示的是,如果您没有点击单元格,则下拉箭头不可见,它看起来像普通文本标签,如下所示:
你可以看到针织有下拉箭头,因为我只是点击它,但其他人没有。遗憾的是,这并不理想,因为没有视觉提示可以单击单元格来显示选项列表。换句话说," Sport"列看起来与"姓氏"相同柱。其中一个是下拉列表,另一个不是,但它们在视觉上看起来相同,除非您碰巧点击其中一个。
有什么办法可以在Swing中完成吗?
编辑:澄清一下,我想要的是" Sport"列中有箭头指示下拉菜单,即使它们不是最少点击的一个。基本上,我希望它看起来像一个组合框,无论我是否点击它。
答案 0 :(得分:5)
我不确定您是否理解JTable
中“渲染器”和“编辑”模式之间的区别。处于编辑模式时,示例中Sport
列中的所有单元格都由组合框支持。
我相信你想做的事情就像......
哪个会混淆UI(恕我直言)
基于here的示例,我修改了代码以更改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);
}
并添加了这个......
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;
}
}
答案 1 :(得分:-1)
首先,您可能需要查看此内容:how to add checkbox and combobox in table cell?
在您的示例中,我认为这可能是由于没有足够的高度来显示GUI。我的意思是Swing组件自动调整大小以填充其容器,如果容器高度太小,则可能无法正确显示GUI。
以下是用于说明我的示例的图像(我使用的是Windows XP):
首次发布:
单击Cell:
细胞点击后: