单击后按钮仍然聚焦

时间:2015-08-12 16:59:06

标签: java swing focus jbutton

我使用我制作的工具栏遇到了一些麻烦。在此我有4 JButtons且低于JTable,当我的窗口显示时,它会设置为焦点,以便看到JButtons未填充。

这是我设置每个JButton的方式:

    btn = new JButton("New");
    btn.setFocusPainted(false);
    btn.setBackground(SystemColor.window);
    btn.setVerticalTextPosition(SwingConstants.BOTTOM);
    btn.setHorizontalTextPosition(SwingConstants.CENTER);
    btn.addActionListener(new ActionListener() {
        ...
    });
    btn.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
    toolBar_General.add(btn);
    btn.setIcon(new ImageIcon(MainWindow.class.getResource("/icons/file11.png")));

开始时我的工具栏示例:http://www.tiikoni.com/tis/view/?id=0ef950b

但点击JButton后,在actionListener完成工作后,它仍会被填满。

点击JButton后我的工具栏示例:http://www.tiikoni.com/tis/view/?id=9e88ea4

我的问题是:如何保存我的按钮contentAreaFilled属性true(这样用户可以在我的窗口中的组件之间切换并查看他选择了哪个控件)并在用户之后取消对齐我的按钮点击?

我想要的结果是第一张照片。

2 个答案:

答案 0 :(得分:0)

您在谈论输入焦点吗? (当焦点具有焦点时,组件显示的虚线矩形)

您可以通过在组件上调用setFocusable(false)来显式禁用获取焦点的组件(例如,每个按钮)。它不会阻止您单击按钮,但它会阻止您使用Tab键将焦点循环到它。

答案 1 :(得分:0)

我认为您正在寻找的电话是:

btn.setRequestFocusEnabled(false);

这将阻止您的按钮在鼠标单击时接管焦点,从而实现不为鼠标用户绘制键盘焦点的目标。但是,它仍然允许以键盘为中心的用户“切换”到他们身上。

但是,如果您的某个按钮获得了初始焦点,那么键盘焦点仍将呈现在那里。在这种情况下,您可能希望通过调用:

选择一些其他敏感组件来放置初始键盘焦点
otherComponent.requestFocusInWindow();