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

可编辑JComboBox键按下不工作

欧盛
2023-03-14

< br >我有这段代码,其中我设计了一个< code >可编辑的JComboBox来侦听我的< code>keyPressed事件,并显示一条消息,说明键已被按下。但我不知道为什么这没用。作为初学者,我可能在逻辑上/概念上犯了错误。

因此,我想征求关于如何构建代码的建议,以使其工作。

密码

import javax.swing.*;
import java.awt.*;

public class testEJCBX extends JFrame {
    JComboBox jcbx = new JComboBox();

    public testEJCBX() {
        super("Editable JComboBox");
        jcbx.setEditable(true);

        getContentPane().setLayout(new FlowLayout());
        getContentPane().add(jcbx);

        jcbx.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) 
            {
                jcbxKeyPressed(evt);
            }
        });

        setSize(300, 170);
        setVisible(true);
    }
    private void jcbxKeyPressed(java.awt.event.KeyEvent evt) {                                      
       JOptionPane.showMessageDialog(null, "Key Pressed");
    }

    public static void main(String argv[]) {
        new testEJCBX();
    }
}

共有1个答案

孔弘盛
2023-03-14

你不应该用KeyListener来做这种事情。相反,如果您想检测组合框编辑器组件的更改,请将其提取并添加DocumentListener:

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;
import java.awt.*;

public class TestEJCBX extends JFrame {
   JComboBox<String> jcbx = new JComboBox<>();

   public TestEJCBX() {
      super("Editable JComboBox");
      setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      jcbx.setEditable(true);

      getContentPane().setLayout(new FlowLayout());
      getContentPane().add(jcbx);

      JTextField editorComponent = (JTextField) jcbx.getEditor()
            .getEditorComponent();

      Document doc = editorComponent.getDocument();
      doc.addDocumentListener(new DocumentListener() {

         @Override
         public void removeUpdate(DocumentEvent e) {
            System.out.println("text changed");
         }

         @Override
         public void insertUpdate(DocumentEvent e) {
            System.out.println("text changed");
         }

         @Override
         public void changedUpdate(DocumentEvent e) {
            System.out.println("text changed");
         }
      });

      pack();
      setLocationRelativeTo(null);
      setVisible(true);
   }

   public static void main(String argv[]) {
      new TestEJCBX();
   }
}
 类似资料:
  • 在我的应用程序中,有一个JComboBox,其中包含大约200个条目。使用该应用程序的人抱怨说,即使他们确切地知道列表的最后一个元素是什么,也必须一直滚动到底部是令人沮丧的。 所以我把JComboBox设置成可编辑的,这样他们就可以输入最后一个元素了。但是,我的数据库不接受该组合框的下拉列表中没有的任何值。 有没有办法使JComboBox仅“可键入”而不是“可编辑”,因此它将允许您键入值,但前提是

  • 我正在使用金属 L 但当我这样做时,cb。setEditable(false),框内出现一个附加边框(在图片“下拉”中变为红色,您可以在名为“固定”的图片中看到原始颜色)。虽然我尝试设置边界,也尝试使用自己的CellRenderer,但边界仍然会被绘制。在我看来,不需要的边界不是来自细胞渲染器。当我试图从cb本身操纵边框时(请参见注释/),它只添加/删除了一个额外的外部边框。编辑部分似乎也不对我负

  • 如何在jcombobox中添加键事件侦听器,以便它接受EX的整个字符串。如果我添加's',它应该在数据库中搜索以's'开头的字符串,如果没有结果,那么它应该等待用户在组合框中键入其他字符来获得类似的结果

  • 我使用的是X-editable引导版本2 我正在使用codeigniter。但是文本区域和文本框对我来说很好,但是下拉菜单不起作用。 在我看来 在我的控制器里 我刚刚测试了这个输出不工作我尝试了很多技巧,但它似乎不工作。 我想显示从表名合同的详细信息如何我可以得到的值作为一个下拉在x编辑

  • 我编写了一个自定义的,这样当我键入示例的列时,除了数字之外什么都不能输入。 如果用户单击单元格一次,然后开始键入,同时仍然允许用户双击单元格开始编辑,我如何防止用户能够编辑单元格?

  • 问题内容: 我试图以编程方式开始在按键上编辑当前行的第三列。 我实现了一个KeyListener,其中包含以下代码 当我释放Enter时,单元格确实是可编辑的(我可以在末尾键入),但是没有插入符号。 当我用鼠标单击时,行为是预期的(我可以进行编辑,并且存在carret)。 另外,我注意到在释放键时,我的celleditor为null,而在mouseclick上,它也不为null。 我究竟做错了什么