【发布时间】:2017-05-09 03:27:00
【问题描述】:
我在 JTable 单元内有一个 JComboBox 渲染器(和单元编辑器)。
我的 JComboBox 有两个项目(“a”和“b”)
我想将 JComboBox 选中的索引设置为 1(对应于“b”)。
我尝试获取渲染器组件失败,并调用“setSelectedIndex(1”)
【问题讨论】:
我在 JTable 单元内有一个 JComboBox 渲染器(和单元编辑器)。
我的 JComboBox 有两个项目(“a”和“b”)
我想将 JComboBox 选中的索引设置为 1(对应于“b”)。
我尝试获取渲染器组件失败,并调用“setSelectedIndex(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;
}
}
【讨论】:
当你使用渲染时,使用 JComboBox 模型是正确的:
String[] vls = new String[]{"a","b"};
JComboBox<String> comboBox1;
...
comboBox1.setModel(new DefaultComboBoxModel(vls));
当您使用 ComboBox 模型时,您可以使用:
comboBox1.getModel().setSelectedItem("b");
或者,当您不使用 ComboBox 模型时:
comboBox1.setSelectedIndex(1);
【讨论】: