我想制作一个JComboBox
,其中特定的项目文字应该更改并在选择时变得可编辑。例如,如果JComboBox
在其列表中有两个项目"ONE","TWO"
,那么选择"TWO"
。
我写了一个示例程序,其中我可以使字段可编辑或可以更改文本但不能同时更改。所以有人请建议如何使选择项目可编辑和更改文本
Object[] items = new Object[]{"One","Two"};
DefaultComboBoxModel dcbm = new DefaultComboBoxModel(items);
final JComboBox comboBox = new JComboBox(dcbm);
comboBox.setPreferredSize(new Dimension(200, 20));
comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
Object selectedItem = comboBox.getSelectedItem();
boolean editable = selectedItem instanceof String && ((String)selectedItem).equals("Two");
comboBox.setEditable(editable);
//comboBox.setSelectedItem("text has changed");
}
});
答案 0 :(得分:3)
像...一样的东西。
String[] data = {"One", "Two"};
JComboBox<String> cb = new JComboBox<>(data);
add(cb);
cb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cb.setEditable(cb.getSelectedIndex() != 0);
}
});
基本上会这样做,但它不会做的是更新模型的价值,只是让你知道;)
如果你想让编辑器空白&#34;当组合框变得可编辑时,你可以添加......
if (cb.isEditable() && cb.getSelectedIndex() != -1) {
cb.setSelectedItem("");
}
到ActionListener
答案 1 :(得分:0)
所以我不是最好的jComboBox,所以这可能没有用,但我会假设它使用一个数组来设置组合框中的对象的字符串
(new String[] {"ONE","TWO"});
根据我对数组的理解,您可以执行类似
的操作comboBox.addMouseListener(new MouseAdapter(){
public void ActionPerformed(MouseEvent click){
optionTwoClicked(click);
}
}
然后添加类似
的处理程序private void optionTwoClicked(MouseEvent click){
if (click.getSelectedItem()=String[2]){
String onTwo = JOptionPane.showInputDialog(null,"Enter your message","Messages",2);
textItem.setText()="onTwo";
}else{ //do something here?
}
}
就像我之前说过的,不是很熟悉jComboBox,但是, 希望有所帮助!