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

Java-是否可以将焦点侦听器添加到组合框?

郎刚捷
2023-03-14

我不知道如何在comboxbox上实现焦点侦听器。我知道这不是一件简单的事情,但其他人似乎已经让它工作[1][2][3],但是在仔细检查每个结果后,我无法复制他们的结果。在网络上进行了广泛的搜索,查看了最新的Oracle指南,Oracle文档等之后,我来到了这里。我的问题很简单:

目标是创建一个与谷歌搜索基本相同的字段。您可以输入搜索查询,它将在文本字段下方的下拉列表中填充可能的搜索匹配项。如果所有这些都失败了,我只需要将comboxbox和textfield置于彼此之上,并设置一些复杂的可见性切换,但我不希望。。。

使用:
Java1.7。0_21(←旁注:为什么我必须转义此下划线以斜体化此文本?下划线有什么作用?)
Windows 7 x64

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JComboBox;
import javax.swing.JTextField;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;

public class focustest extends JFrame {

    private JPanel contentPane;
    private JTextField textField;
    public focustest theframe;
    
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                focustest theframe = new focustest();
                theframe.setVisible(true);
            }
        });
    }

    public focustest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 106);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        JComboBox comboBox = new JComboBox();
        comboBox.addFocusListener(new FocusAdapter() {
            @Override
            public void focusGained(FocusEvent arg0) {
                JOptionPane.showMessageDialog(theframe, "focus gained!", null,JOptionPane.PLAIN_MESSAGE);
            }
            @Override
            public void focusLost(FocusEvent arg0) {
                JOptionPane.showMessageDialog(theframe, "focus lost!", null,JOptionPane.PLAIN_MESSAGE);
            }
        });
        comboBox.setEditable(true);
        contentPane.add(comboBox, BorderLayout.NORTH);
        textField = new JTextField();
        contentPane.add(textField, BorderLayout.SOUTH);
        textField.setColumns(10);
    }
    
}

共有1个答案

阎裕
2023-03-14
comboBox.getEditor().getEditorComponent().addFocusListener(new FocusAdapter() {
   // ....
}

祝你好运。

 类似资料:
  • 问题内容: 我有一个ArrayList,它向其中动态添加了一些对象,并且有一个JButton。运行我的程序时ArrayList为空,并且JButton设置为setEnabled(false)。我想在ArrayList中有2个或更多元素时启用我的按钮,如果ArrayList有一项或为空则再次禁用它。我该如何实现? 问题答案: 没有任何种类的通知机制。 我建议您编写自己的实现,该实现将委托给私有的实现

  • 是否有办法将AWT侦听器添加到SWT组件? 我以前制作了一个主要在AWT和Swing组件中运行的应用程序。现在,我有热键功能,它依赖于一个定制的库,该库监听全局键事件并返回相应的AWT键代码。 当我改变整个应用程序并使用SWT组件时,我的问题就出现了。正如我们所知,一些键现在返回一个不同的键代码,这扰乱了整个热键功能。 我想到的最初解决方案是: A.使用javax。摆动jtextfield作为my

  • 问题内容: 我想用JLabel替换JButton,并且希望我的代码在单击JLabel时执行一些操作。 当我拥有JButton时,我使用动作侦听器来处理按钮的单击: 当我替换为时,我在Eclipse中收到以下错误消息: 对于JLabel类型,未定义方法addActionListener(ChipsListener) 但我确实知道应该可以将单击处理程序附加到JLabel。有人知道该怎么做吗? 问题答案

  • 我实现了一个ComboBox,它是可编辑的,并自动完成自己,类似于这个答案中的一个:https://stackoverflow.com/a/27384068/9611276 现在我想添加一个侦听器,当这个组合框中的值发生变化时,它会执行一些操作。大概是这样的: 问题是,我无法访问组合框。getValueProperty()而不获取java。lang.ClassCastException。在上面的回

  • 问题内容: 我正在尝试将鼠标侦听器添加到MapMarker,以便当鼠标将鼠标悬停在MapMarker上时,我可以对事件做出反应。 我实现了mouseListener,但是我不能真正添加​​一个监听器。问题是由于没有层次结构实现JPanel,所以我没有找到MapMarker添加addMouseListener的方法。 任何帮助表示赞赏 问题答案: 如前所述这里,默认的构造函数使用了“这实现了Map按

  • 我目前正在尝试对我的实现一个操作侦听器,以便在选择它时,它将打开一个供用户选择他们希望GUI使用的文件。对于初学者,我如何让控制台打印出“框单击!”当用户选中该框时? 它已经有一段时间,因为我已经在摇摆编程,所以任何建议都有帮助!