我想通过值而不是索引在JComboBox中设置所选索引.怎么做?例
public class ComboItem {
private String value;
private String label;
public ComboItem(String value, String label) {
this.value = value;
this.label = label;
}
public String getValue() {
return this.value;
}
public String getLabel() {
return this.label;
}
@Override
public String toString() {
return label;
}
}
JComboBox test = new JComboBox();
test.addItem(new ComboItem(0, "orange"));
test.addItem(new ComboItem(1, "pear"));
test.addItem(new ComboItem(2, "apple"));
test.addItem(new ComboItem(3, "banana"));
test.setSelectedItem("banana");
Run Code Online (Sandbox Code Playgroud)
好的,我已经修改了一下我的问题.我忘记了我的JComboBox里面有一个自定义项目,这让它变得有点困难.我不能做setSelectedItem,因为我在每个项目中都有一个ComboItem.那么,我怎么做到这一点?
问题:
更新:
来自Java SE 6 API:
public JComboBox()使用默认数据模型创建JComboBox.默认数据模型是一个空的对象列表.使用addItem添加项目.默认情况下,数据模型中的第一项将被选中.
所以我改为JComboBox(模型),因为API说:
public JComboBox(ComboBoxModel aModel) 创建一个JComboBox,从现有的ComboBoxModel获取其项目.由于提供了ComboBoxModel,使用此构造函数创建的组合框不会创建默认的组合框模型,并且可能会影响插入,移除和添加方法的行为方式.
我尝试了以下方法:
DefaultComboBoxModel model = new DefaultComboBoxModel();
model.setSelectedItem(null);
suggestionComboBox = new JComboBox(model);
suggestionComboBox.setModel(model);
Run Code Online (Sandbox Code Playgroud)
但无法使其工作,第一项仍在被选中.
任何能够提出工作实例的人都会非常感激.
帖子的老部分:
我正在使用JComboBox,并尝试setSelectionIndex(-1)
在我的代码中使用(此代码放在caretInvoke()
)
suggestionComboBox.removeAllItems();
for (int i = 0; i < suggestions.length; i++) {
suggestionComboBox.addItem(suggestions[i]);
}
suggestionComboBox.setSelectedIndex(-1);
suggestionComboBox.setEnabled(true);
Run Code Online (Sandbox Code Playgroud)
这是添加到窗格时的初始设置:
suggestionComboBox = new JComboBox();
suggestionComboBox.setEditable(false);
suggestionComboBox.setPreferredSize(new Dimension(25, 25));
suggestionComboBox.addActionListener(new SuggestionComboBoxListener());
Run Code Online (Sandbox Code Playgroud)
当caretInvoke触发ComboBox初始化时,即使在用户选择元素之前,actionPerformed已经被触发(我在这里尝试了一个JOptionPane):http : //i126.photobucket.com/albums/p109/eXPeri3nc3/StackOverflow/combo1.png http://i126.photobucket.com/albums/p109/eXPeri3nc3/StackOverflow/combo2.png http://i126.photobucket.com/albums/p109/eXPeri3nc3/StackOverflow/combo3.png
问题是:当用户从ComboBox中选择一个元素时,我的程序会自动插入所选文本.因此,无需用户选择任何内容,它就会自动插入.
这是我的SSCCE :(最后)
package components;
import java.awt.BorderLayout;
import java.awt.Dimension;
import …
Run Code Online (Sandbox Code Playgroud) 我有一个带有元素列表的JComboBox.所以程序基本上做的是用户从组合列表中选择一个元素,然后单击一个按钮在文本区域中显示所选元素.
到目前为止,一切都很完美,但问题是在用户点击按钮后我希望组合框返回到第一个元素并显示第一个元素.如何显示组合框的第一个元素...... ????
我想用一个正则表达式替换所有操作来注释掉大量的多行日志记录语句.
我的[可能]多行语句如下所示:
logger.info( "Log Message: [" + myVariable
+ "] is has a value of: [" + myVariable.getValue() + " ]"
+ LogColors.ANSI_RESET );
Run Code Online (Sandbox Code Playgroud)
以下正则表达式语句(使用.匹配新行启用)成功查找(并选择)所有适当的行,直到结束分号.
(logger\..+?\);)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将所有替换为:
// \1
Run Code Online (Sandbox Code Playgroud)
只()
替换了我标记的封闭表达式的第一行.所以我留下了这个编译器不友好的多行语句:
// logger.info( "Log Message: [" + myVariable
+ "] is has a value of: [" + myVariable.getValue() + " ]"
+ LogColors.ANSI_RESET );
Run Code Online (Sandbox Code Playgroud) 在try-with-resources [autoclosable]块中使用GZipOutputStream时,我在处理完资源finish()
后是否需要显式调用?