【问题标题】:Java JComboBox is it possible to set editable true into one item only?Java JComboBox 是否可以仅将可编辑的 true 设置为一项?
【发布时间】:2023-03-18 03:15:01
【问题描述】:

我想创建一个包含三个项目的JComboBox。例如,我想将可编辑设置为JComboBox 的最后一个项目:

JComboBox cb = new JComboBox();

cb.addItem("Dog");
cb.addItem("Cat");
cb.addItem("Other");

当我下拉JComboBox 并选择其他项目时..JComboBox 变为可编辑.. 我该怎么做?

【问题讨论】:

  • 使Other 弹出一个JOptionPane 输入对话框。将返回的项目添加到组合框模型中的倒数第二位。
  • 那里有示例代码吗?
  • “那里有示例代码吗?” 在那条评论中? ..你看到了吗?

标签: java swing jcombobox


【解决方案1】:

您可以使用ItemListener 来了解选择了哪个项目,然后您可以根据需要设置JComboBox 可编辑。试试这个例子:

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Demo {

      private void initGUI(){        
        Object[] items = new Object[]{"Dog","Cat","Other"};
        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("Other");
                comboBox.setEditable(editable);
            }
        });

        /*
         * Here you can add a new item to your JComboBox when it becomes editable
         */
        comboBox.getEditor().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Object newItem = comboBox.getEditor().getItem();                  
                DefaultComboBoxModel dcbm = (DefaultComboBoxModel) comboBox.getModel();
                dcbm.addElement(newItem);
                dcbm.setSelectedItem(newItem);
            }
        });

        JPanel content = new JPanel(new FlowLayout());
        content.add(new JLabel("Test:"));
        content.add(comboBox);

        JFrame frame = new JFrame("Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(content);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }

    public static void main(String[] args) {        
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Demo().initGUI();
            }
        });      
    }
}

As you'll see, when "Other" item is selected JComboBox becomes editable:

【讨论】:

  • 我怎样才能得到另一个文本?
  • 只是为了澄清您的JComboBox 是否可以编辑,这并不意味着您可以“编辑”所选项目的值。这意味着您可以使用其编辑器将项目添加到您的JComboBox。获取新字符串的方法是:comboBox.getEditor().getItem()。查看更新的答案。
【解决方案2】:

这是一个演示(不是我做的),它似乎可以实现您所追求的。 http://raginggoblin.wordpress.com/2010/05/04/jcombobox-with-disabled-items/

【讨论】:

  • “这似乎达到了你所追求的目标。” 我不认为它会。禁用的项目不可使用,因此无法触发操作事件。
  • 抱歉,我需要进行眼睛检查。即使在 Andrew 告诉我之后,我也花了一段时间才意识到这个问题是关于可编辑而不是启用的。对不起。
猜你喜欢
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 2019-01-01
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
相关资源
最近更新 更多