在JTable中创建JComboBox,下拉列表始终可见

时间:2014-06-29 05:26:23

标签: java swing jtable jcombobox

在Swing中可以在JTable中创建一个JComboBox,如Oracle this guide所示。他们有一张可爱的照片,显示了这一点:

enter image description here

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

enter image description here

你可以看到针织有下拉箭头,因为我只是点击它,但其他人没有。遗憾的是,这并不理想,因为没有视觉提示可以单击单元格来显示选项列表。换句话说," Sport"列看起来与"姓氏"相同柱。其中一个是下拉列表,另一个不是,但它们在视觉上看起来相同,除非您碰巧点击其中一个。

有什么办法可以在Swing中完成吗?

编辑:澄清一下,我想要的是" Sport"列中有箭头指示下拉菜单,即使它们不是最少点击的一个。基本上,我希望它看起来像一个组合框,无论我是否点击它。

2 个答案:

答案 0 :(得分:5)

我不确定您是否理解JTable中“渲染器”和“编辑”模式之间的区别。处于编辑模式时,示例中Sport列中的所有单元格都由组合框支持。

我相信你想做的事情就像......

Example

哪个会混淆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):

首次发布: enter image description here

单击Cell:

enter image description here

细胞点击后:

enter image description here