JComboBox在选择时可编辑且空白

时间:2016-04-07 06:24:04

标签: java swing frame jcombobox

我想制作一个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");

        }
    });

2 个答案:

答案 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,但是, 希望有所帮助!