mirinda95925 2010-08-05 16:06
浏览 1207
已采纳

java swing 判断焦点的问题

[code="java"]
cv.downPage.requestFocus();//设置焦点
System.out.println("是否获得焦点:"+cv.downPage.isFocusOwner());
[/code]

这个按钮是在一个frame中的。
图上已经显示这个按钮有焦点了,但是我调用isFocusOwner()方法却显示false(焦点不在这个按钮上)

求解答

  • 写回答

3条回答 默认 最新

  • nxyc_twz 2010-08-06 11:40
    关注

    研究一早上jdk源码,终于算是帮你解决了!
    这是我的测试代码:
    [code="java"]
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.JButton;
    import javax.swing.JFrame;

    public class TestFocus {
    public static void main(String [] argv){
    final JFrame frame = new JFrame(){
    public boolean isFocused(){//重载JFrame
    return false;
    }
    };
    frame.setSize(600, 600);
    final JButton btn1 = new JButton("a");
    final JButton btn2 = new JButton("b");

        btn1.addActionListener(new ActionListener(){
            //点击按钮a后,自动将焦点转移到按钮b
            public void actionPerformed(ActionEvent arg0) {
                Component c = frame.getMostRecentFocusOwner();
                System.out.println("点击前-->button b 是否获得焦点:"+btn2.equals(c));  
                btn2.requestFocus();
                c = frame.getMostRecentFocusOwner();
                System.out.println("点击后-->button b 是否获得焦点:"+btn2.equals(c));  
            }
    
        });
        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(btn1, BorderLayout.NORTH);
        frame.getContentPane().add(btn2, BorderLayout.SOUTH);
        frame.setVisible(true);
    }
    

    }

    [/code]

    运行结果:
    [code="java"]
    点击前-->button b 是否获得焦点:false
    点击后-->button b 是否获得焦点:true
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器