Java JComboBox 是否可以将 editable true 设置为仅一项?

标签 java swing jcombobox

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

JComboBox cb = new JComboBox();

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

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

最佳答案

您可以使用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();
            }
        });      
    }
}

正如您将看到的,当选择“其他”项时,JComboBox 变得可编辑:

enter image description here

关于Java JComboBox 是否可以将 editable true 设置为仅一项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19138681/

相关文章:

java - Android 已弃用的方法

java - hibernate 困惑。 ga、GA 和 Final Releases 之间有什么区别?兼容性?存储库?

java - 如何在 JTextField 中使用 2 个 JComboBox 中的值?

java - JCombobox 箭头消失

java - 在 Java/Android 中将 double 格式化为至少一位有效数字

java - 使用 Apache POI 导入 CSV 数据

java - 将鼠标悬停在 JButton 上时,会出现不需要的文本

java - 如何获取存储在数据库中的图像路径并将其设置为按钮

java - 使用 JOptionPane 时 JTable boolean 值不更新

使用 setModel() 更新 JComboBox 时出现 java.lang.IllegalStateException?