如何找到关注哪个组件?

时间:2014-03-31 09:01:48

标签: java swing focus awt focuslistener

嘿我有一个面板类,其中有两个面板,其中一个面板有文本字段。我想在集中注意力时执行一个动作。 面板添加在主框架上。

3 个答案:

答案 0 :(得分:2)

使用FocusListener,这是一个简单的例子:

import java.awt.BorderLayout;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.JFrame;
import javax.swing.JTextField;

public class TestFrame extends JFrame{

    public TestFrame(){
        init();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    private void init() {
        JTextField f1 = new JTextField(5);
        f1.addFocusListener(getFocusListener());
        add(f1,BorderLayout.SOUTH);
        add(new JTextField(5),BorderLayout.NORTH);
    }


    private FocusListener getFocusListener() {
        return new FocusAdapter() {

            @Override
            public void focusGained(FocusEvent e) {
                super.focusGained(e);
                System.out.println("action");
            }
        };
    }

    public static void main(String... s){
        new TestFrame();
    }

}

此外JFrame还有getFocusOwner()方法。

答案 1 :(得分:1)

使用api

JFrame.getFocusOwner()

这将返回对焦点

的组件的引用

你也可以检查......

KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()

要进行修改,只需将FocusListener添加到相应的Component,然后实现特定acitons的界面。

答案 2 :(得分:1)

有视觉线索有助于了解哪个组件具有焦点,例如文本字段中的活动光标。要使用FocusListener接口并且为了监听键盘获得或失去焦点,从类创建的侦听器对象需要使用组件的addFocusListener()方法向组件注册。两个重要的方法focusGained(FocusEvent e)void focusLost(FocusEvent e)有助于找到哪个组件是重点。

了解有关What is FocusListener Interface and How it Works的更多信息。