【问题标题】:Set JComboBox selected index inside JTable在 JTable 中设置 JComboBox 选定索引
【发布时间】:2017-05-09 03:27:00
【问题描述】:

我在 JTable 单元内有一个 JComboBox 渲染器(和单元编辑器)。

我的 JComboBox 有两个项目(“a”和“b”)

我想将 JComboBox 选中的索引设置为 1(对应于“b”)。

我尝试获取渲染器组件失败,并调用“setSelectedIndex(1”)

【问题讨论】:

    标签: java jcombobox


    【解决方案1】:

    我想将 JComboBox 选中的索引设置为 1(对应于“b”)。

    你没有设置索引。

    编辑器由表中的所有行共享。当单元格开始编辑时,组合框项目被选中。这是自动完成的。

    所以您需要做的就是将适当的数据添加到 TableModel。

    因此,在您的情况下,当您创建 TableModel 时,需要将值“b”添加到行的 TableModel 中。

    编辑:

    我的 JComboBox 是 JTable 中的渲染器。

    自定义渲染器看起来像:

    class ComboBoxRenderer extends JComboBox implements TableCellRenderer
    {
        public ComboBoxRenderer()
        {
            setBorder(null);
        }
    
        public Component getTableCellRendererComponent(
            JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
        {
            removeAllItems();
            addItem( value );
    
            return this;
        }
    }
    

    【讨论】:

    • 我明确希望设置索引。例如,我的可用选择是“a”和“b”。当用户单击(例如)某些 JButton 时,我希望可见的选定选项为“b”
    • 我的两条数据(“a”和“b”)已经在数据模型中。默认情况下,显示第一个数据字符串(“a”)。我希望显示不同的索引(1,对应于“b”)。我相信你错了,这是可以做到的。也许你误解了我的问题。
    • 澄清一下,我的数据模型已经有“a”和“b”(作为 String []),JComboBox 构造函数使用 String[]。
    • @user6013878,不,数据模型不会将数据存储为字符串数组。它只是将模型中的数据作为字符串存储。每当您编辑单元格时,字符串都会自动存储在模型中。您在 2 分钟内回复了可能最后的评论。那没有给您时间关注链接、下载代码和测试代码。我给了你一个工作示例的链接。按照链接,下载代码并测试它!!!另外,请参阅自定义渲染器的编辑..
    • 虽然我很欣赏你的例子,但它绝对和我的例子不一样。您有一个编辑器(存储字符串数组)和一个数据模型。您的数据模型重复存储在编辑器中的相同字符串。因此,当然,如果将数据模型设置为新字符串,它将出现在表中。在我的示例中,我只有一个带有 RENDERER 的模型(因此单元格看起来像一个组合框,不像在您的示例中,单元格在单击之前不会像组合框一样出现)。我的模型包含一个字符串数组。我不能(也不想)从模型中删除项目。
    【解决方案2】:

    当你使用渲染时,使用 JComboBox 模型是正确的:

    String[] vls = new String[]{"a","b"};
    JComboBox<String> comboBox1;
    ...
    
    
    comboBox1.setModel(new DefaultComboBoxModel(vls));
    

    当您使用 ComboBox 模型时,您可以使用:

    comboBox1.getModel().setSelectedItem("b");
    

    或者,当您不使用 ComboBox 模型时:

    comboBox1.setSelectedIndex(1);
    

    【讨论】:

    • 组合框被表格中的所有行使用。你不能只设置一个选定的索引渲染器或编辑器只会在组合框中显示来自 TableModel 的值。
    • 嗨:您的答案是针对普通的 JComboBox(单独)。但是,我的 JComboBox 是 JTable 中的渲染器。
    • 谢谢你,也许是我不专心,对不起