【问题标题】:How to find which component is focused?如何找到关注的组件?
【发布时间】:2014-05-10 13:14:43
【问题描述】:

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

【问题讨论】:

    标签: java swing focus awt focuslistener


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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() 方法。

      【讨论】:

        【解决方案3】:

        使用 API

        JFrame.getFocusOwner()
        

        这将返回对具有焦点的组件的引用

        你也可以检查....

        KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()
        

        要进行修改,只需将 FocusListener 添加到您各自的组件中,并为您的特定动作实现接口。

        【讨论】:

          猜你喜欢
          • 2020-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多