当前位置: 首页 > 知识库问答 >
问题:

Java JComboBox可以只在一个项目中设置editable true吗?

苏建安
2023-03-14

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

JComboBox cb = new JComboBox();

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

当我下拉< code>JComboBox并选择项目Others时..< code>JComboBox变得可编辑..我该怎么做呢?

共有2个答案

毕宏盛
2023-03-14

这里有一个演示(不是我做的),似乎可以达到你的目的。http://ragingoblin . WordPress . com/2010/05/04/jcombobox-with-disabled-items/

咸玄天
2023-03-14

您可以使用ItemListener来知道选择了哪个项目,然后可以根据需要设置< code>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变得可编辑:

 类似资料:
  • 我想在recyclerview中创建可扩展的项目,我想,使用MotionLayout创建动画会非常简单。我创建了运动场景,并测试了当在回收器视图中视图无法设置动画时,单个项目是否能够独立工作。 我试着显示所有调试信息,它说转换正在进行,但recyclerview没有显示任何动画。我试着通知项目动画师,动画已经在我的viewholder上启动,但没有成功。 我预计motinolayout状态转换将在

  • 我有一个(基于Maven的)项目a加载在Intellij中,它有许多依赖项。 我想在B中放置断点并调试项目A,以便在项目B中达到断点时A停止。 在Eclipse中,我只需要将两个项目放在同一个工作区中,它就可以工作了。由于Intellij中没有工作区,我想知道该如何做,以及是否可能。

  • 我有2个项目,其中有相同的gradle设置关于映射框一般和他们中的一个工作完全正常和其他不工作在所有的错误,这被写入日志内的构建时间是众所周知的: 代码片段(项目gradle): 模块等级: 完整生成消息: 同步gradle配置后的警告消息: 有人知道扭曲在哪里吗?在这两种方法中,我都没有使用jcenter(),但我在一个不起作用的方法中尝试了它,它也没有任何帮助。任何帮助都将不胜感激

  • 问题内容: Gradle可以将多个项目合并到一个jar中吗? 我知道您可以使用以下方法针对单个项目执行此操作: 但是一个人如何将多个子项目压缩到一个jar中呢? 我试过了,但不起作用: 问题答案: 这是我的解决方案,它稍微简单一些: 代码已在Gradle 1.12上进行了测试

  • 问题内容: 问题答案: 您可以通过以下方式之一: 在依赖项中,您可以将其他项目添加到您的项目中。右键单击项目->属性-> Java构建路径->项目。在此处添加您的项目。 要么 将项目类放入jar,并将其添加到其他项目中 依赖关系应添加到类路径中 在运行时,请确保在两种情况下,都将引用项目的JAR文件添加到类路径中。