在netbeans

时间:2018-02-19 08:58:17

标签: event-handling jcombobox netbeans-8 focuslistener

我试图在我的组合框上绑定一个focuslost事件,但它没有发生。

这是我的代码 - :

jComboBox1.addFocusListener(new FocusListener(){
        public void focusGained(FocusEvent e){

        }
        public void focusLost(FocusEvent e){
         JOptionPane.showConfirmDialog(null,"focuslost");
          }
      });

我也尝试了这个 - :

JComboBox默认编辑器有一个内部类BasicComboBoxEditor $ BorderlessTextField,它是获取和失去焦点的组件。

只需通过 - :

即可访问
Component component = comboBox.getEditor().getEditorComponent();  
if (component instanceof JTextField) 
JTextField borderlesstextfield = (JTextField) borderless;

但我在这一行上遇到错误 -

 JTextField borderlesstextfield = (JTextField) borderless;

我是netbeans的新手。请指导我。提前谢谢你。

1 个答案:

答案 0 :(得分:2)

我测试了这个(在JPanel中添加JComboBox)。如果面板内有更多元素,则在按Tab键或单击另一个元素时会触发focuslost。

考虑到您没有任何其他元素,或者您希望在单击窗口某处时触发焦点丢失事件:

按原样保持焦点监听器,并在自动生成的initComponents()后添加以下内容:

    jPanel1.setFocusable(true);
    jPanel1.setRequestFocusEnabled(true);
    jPanel1.addMouseListener(new MouseListener() {
        @Override
        public void mouseClicked(MouseEvent e) {}

        @Override
        public void mousePressed(MouseEvent e) {
            jPanel1.requestFocusInWindow();
        }

        @Override
        public void mouseReleased(MouseEvent e) {}

        @Override
        public void mouseEntered(MouseEvent e) {}

        @Override
        public void mouseExited(MouseEvent e) {}
    });