我一直在试图通过大量的Google搜索来确定为什么我的JComboBox显示列表中的第一个项目,但我正在努力寻找相关的帮助。可能是我不知道正确的术语(因此这个问题的标题过于具体),因此找不到可以解释我的问题的信息。我查看了JComboBox API,以及它使用的一些侦听器和模型,但它们似乎不太可能是候选者。
有问题的JComboBox在JTable中,所以我不知道这是否改变了它的默认行为。我使用的代码如下:
//row and col are final due to usage inside anonymous inner class
public TableCellEditor getCellEditor(final int row, final int col)
{
String[] listItems = new String[arrayList.getSize()];
int i = -1;
for(String s : arrayList)
{
i++;
listItems[i] = s;
}
JComboBox<String> box = new JComboBox<>(listItems);
box.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
if(e.getStateChange() == ItemEvent.SELECTED)
{
if(e.getItem().equals("Add/Edit Projectile"))
{
//Where Editor is a JFrame that will be opened
new Editor();
}
}
}
});
DefaultCellEditor list = new DefaultCellEditor(box);
}
请注意,我的程序中的Arraylist不包含字符串,而是包含一组更复杂的html" target="_blank">自定义对象,我认为这会分散对主要问题的注意力。
我没有在JTable中包含JComboBox的渲染器,因为我对它的显示方式非常满意,并认为我的问题更多的是我忽略了在模型中实现/实现错误。
如果有人对在哪里寻找/解决方案有任何建议,我将不胜感激。
编辑
我的特定表有两列,其中左列是变量名称,右列是与变量关联的值。表的作用是显示选定对象的属性,其中不同对象的不同变量的每个值可能不相同。
在这种特殊情况下,单元格会显示一个JComboBox,其中包含我们正在制作的游戏中所有可用的射弹。每个敌人都有一种不同类型的射弹,它默认为。因此,当我点击游戏区域中的其他敌人时,该表将显示其所有当前属性(如果未更改,则为默认值)。
敌人确实有一个弹丸的getter,所以我可以确定当前选择的敌人是什么,得到它的弹丸,做一个toString()来找到它在列表中的表示方式,并做一个setValueAt()。
唯一的问题是,当列表展开时,它总是选择列表中的第一项。
这是您应该默认为先前选择的元素的方式:
//...
Object selectedItem = box.getSelectedItem();
//Add some elements to the jComboBox
box.setSelectedItem(selectedItem);
尽管这是一首老歌...
您的问题很可能是您没有在组合中使用的类中实现“equals”。
组合需要在准备时选择当前项目,通过遍历模型的元素来完成,并选择第一个等于单元格中的值的项目。如果没有遇到任何元素,那么它保持组合不变(或者是第一个元素,或者是上一次单元格编辑中使用的最后一个元素)
除非为每行动态生成JComboBox
的值,否则您应该能够提前准备单元编辑器
,例如。。。
JComboBox cb = new JComboBox(new String[]{"1", "2", "3", "4"});
DefaultCellEditor editor = new DefaultCellEditor(cb);
JTable table = new JTable(new DefaultTableModel(5, 1));
table.getColumnModel().getColumn(0).setCellEditor(editor);
这将在编辑过程开始时将编辑器的选定值设置为单元格的值
更新
在每一行动态生成组合框值的情况下,您可以执行更像...
JComboBox cb = new JComboBox();
DefaultCellEditor editor = new DefaultCellEditor(cb) {
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
JComboBox editor = (JComboBox) getComponent();
String[] listItems = new String[arrayList.getSize()];
int i = -1;
for (String s : arrayList) {
i++;
listItems[i] = s;
}
DefaultComboBoxModel model = new DefaultComboBoxModel(listItems);
editor.setModel(model);
editor.setSelectedItem(value);
return editor;
}
};
JTable table = new JTable(new DefaultTableModel(5, 1));
table.getColumnModel().getColumn(0).setCellEditor(editor);
请注意使用 editor.setSelectedItem(value);
,这会将所选值设置为单元格当前值...
您还可以重用模型,每次清除它并用新值重新填充它。如果您有大量行,您可能会发现这更有效,因为您不需要在每次编辑单元格时不断创建新模型
我被一个奇怪的编程问题困住了。我已经定义了一个模式,其中如果没有为列(列名是Title)传递值,那么将使用默认值(Harry)。 标题|字符变化(64)|默认“Harry”::字符变化 而且,我正在尝试通过我的java应用程序使用hibernate插入条目。 发生的情况是,hibernate在任何查询中都显式地为该列提供空值,因此这些条目的默认值不会显示在表中。 这里要提到的是,当我自己执行任何i
好吧,这是一个两部分的问题,我试图最好地解释我的疑问: 代码很简单,用户不断输入成绩,程序会对其进行计数,一旦用户给出EOF条目,程序会在最后显示每个成绩的最终计数。 1) 当我运行代码时,程序会正确地跟踪我输入的每个等级的计数,但总是落在默认情况下,即使输入是正确的!为什么会这样? 2) 因此,我不完全确定“cin.get()”是如何工作的,但如果我是对的,它会接受用户输入的任何内容的第一个字符
我从Highchart网站上找到了以下代码:https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/demo/dynamic-update/ 我想在默认序列为空的图表上显示数据,并将设置为。我不想使用jQuery,也不想在图表中添加加载事件点。我只想在页面完全加载时添
问题内容: 我只想显示包装文本块的第一行,然后在单击时显示整个块。另外,我想知道如何在第二次单击时将其切换回紧凑的单行版本。 有没有简单的方法可以通过CSS + JavaScript做到这一点?我使用jQuery。 问题答案: 假设您不想使用任何JavaScript库(这很 奇怪 )。 HTML: CSS: JavaScript: 另外,如果您想使用jQuery之类的JavaScript框架,则可
本文向大家介绍SpringSecurity 默认表单登录页展示流程源码,包括了SpringSecurity 默认表单登录页展示流程源码的使用技巧和注意事项,需要的朋友参考一下 SpringSecurity 默认表单登录页展示流程源码 本篇主要讲解 SpringSecurity提供的默认表单登录页 它是如何展示的的流程, 涉及 1.FilterSecurityInterceptor, 2.Excep