Java JComboBox与DefaultComboxModel不兼容';不允许添加或删除

Java JComboBox与DefaultComboxModel不兼容';不允许添加或删除,java,swing,model,autocomplete,jcombobox,Java,Swing,Model,Autocomplete,Jcombobox,这是我的第一篇文章,我认为我做得对 我有一个程序,它从自动完成jComboBox中获取用户输入,然后将输入发送到文本文件中(自动完成是使用glazedlists_java15/1.8.0库完成的) 使用自动完成功能后,我必须将jComboBox设置为DefaultComboxModel。 当用户按下Enter键时,jComboBox应使用从键盘键入的新项目更新列表,以便用户可以看到jComboBox列表中最后键入的项目 这是通过从jComboBox中删除所有项目并然后再次插入它们来完成的 问题是

这是我的第一篇文章,我认为我做得对

我有一个程序,它从自动完成jComboBox中获取用户输入,然后将输入发送到文本文件中(自动完成是使用glazedlists_java15/1.8.0库完成的)

使用自动完成功能后,我必须将jComboBox设置为DefaultComboxModel。

当用户按下Enter键时,jComboBox应使用从键盘键入的新项目更新列表,以便用户可以看到jComboBox列表中最后键入的项目

这是通过从jComboBox中删除所有项目然后再次插入它们来完成的

问题是在拥有自动完成功能之前,我只能说jcombox1.removeAllItems()但是现在由于模型的原因,我不得不使用model.removeAllements()来实现它

public class Test {
    final static DefaultComboBoxModel model = new DefaultComboBoxModel();
    static JComboBox c                = new JComboBox(model);
    private static final long serialVersionUID = 1L;
    private static JButton b = new JButton();
    static JFrame f = new JFrame();
    /**
     * @param args
     */
    public static void TestFrame() {
        String[] a = {"hi1" , "hi2", "hi3", "hi4","hi5"};
        AutoCompleteSupport support = AutoCompleteSupport.install(c,
                GlazedLists.eventListOf(a));
        JPanel test = new JPanel();
        test.add(b);
        test.add(c);
        model.addElement(a);
        b.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                model.removeAllElements();

            }



        });
        f.add(test);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
        f.setSize(500,500);

    }
问题是model.removeAllements()模型。附加元素不工作,因此无法更新jComboBox。请你慢慢来,帮我找到解决办法好吗。谢谢

编辑:

我不知道你的问题在哪里,这对我来说完全有效

final DefaultComboBoxModel model = new DefaultComboBoxModel();
JComboBox c                = new JComboBox(model);
private static final long serialVersionUID = 1L;
private JButton b = new JButton();

public TestFrame() {
    JPanel test = new JPanel();
    test.add(b);
    test.add(c);
    model.addElement("hi");

    b.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            model.removeAllElements();

        }
    });
    this.add(test);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    this.setSize(500,500);

}
可能您没有找到keylistener

import java.awt.event.ActionEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import ca.odell.glazedlists.EventList;
import ca.odell.glazedlists.GlazedLists;
import ca.odell.glazedlists.swing.AutoCompleteSupport;

public class TestFrame
{
    private static JComboBox c = new JComboBox();
    private static JButton b = new JButton();
    private static JFrame f = new JFrame();
    private static String[] a = {"hi1", "hi2", "hi3", "hi4", "hi5"};

    public static void TestFrame()
    {
        final EventList<String> items = GlazedLists.eventListOf(a);
        AutoCompleteSupport.install(c, items);
        JPanel test = new JPanel();
        test.add(b);
        test.add(c);
        c.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                c = (JComboBox) e.getSource();

                if (e.getActionCommand().equals("comboBoxEdited"))
                {
                    items.clear();
                }
            }
        });
        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                items.clear();
            }
        });
        f.add(test);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
        f.setSize(500, 500);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                TestFrame();
            }
        });
    }
}
导入java.awt.event.ActionListener; 导入javax.swing.JButton; 导入javax.swing.JComboBox; 导入javax.swing.JFrame; 导入javax.swing.JPanel; 导入javax.swing.SwingUtilities; 导入ca.odell.glazedlists.EventList; 导入ca.odell.glazedlist.glazedlist; 导入ca.odell.glazedlists.swing.AutoCompleteSupport; 公共类测试框架 { 私有静态JComboBox c=newjcombobox(); 私有静态JButton b=newjbutton(); 私有静态JFrame f=newjframe(); 私有静态字符串[]a={“hi1”、“hi2”、“hi3”、“hi4”、“hi5”}; 公共静态void TestFrame() { 最终事件列表项=GlazedList.eventListOf(a); 自动完成支持。安装(c,项目); JPanel测试=新的JPanel(); 测试。添加(b); 测试。添加(c); c、 addActionListener(新ActionListener() { 已执行的公共无效操作(操作事件e) { c=(JComboBox)e.getSource(); if(例如getActionCommand().equals(“ComboBoxedEded”)) { items.clear(); } } }); b、 addActionListener(新ActionListener() { 已执行的公共无效操作(操作事件e) { items.clear(); } }); f、 添加(测试); f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f、 setVisible(真); f、 设置大小(500500); } 公共静态void main(字符串[]args) { SwingUtilities.invokeLater(新的Runnable() { 公开募捐 { TestFrame(); } }); } }
1。不知道目标是什么,也不知道用GlazeList怎么做,2。将DocumentListener添加到派生编辑器,3。是否存在JComboBox#setEditable(true)和另一个基于==的3-4问题,以便更快地发布帮助,您使用repaint()、validate()等进行了尝试?交叉发布。我尝试了repaint()和validate(),但仍然存在相同的问题。我将尝试使用您的示例,看看是否有效,然后添加库,看看这是否正在改变某些内容。谢谢你的帮助,我试过你的例子,正在发挥作用。再次感谢。我已将GlazedList库添加到您的示例中,不再工作。我使用基于您的示例的新测试代码编辑了问题中的代码,以便您有时间可以查看。。。