【问题标题】:Is there a way to remove that focus on the button in a JOptionPanel? [duplicate]有没有办法消除对 JOptionPane 中按钮的关注? [复制]
【发布时间】:2022-01-20 03:42:24
【问题描述】:

有没有办法消除JOptionPanel 中按钮的焦点?我真的很想删除它。我看起来很碍眼。我的代码是JOptionPanel

JOptionPane.showMessageDialog(
                null,
                mainPanel,
                "CREDITS   (づ ̄ ³ ̄)づ ",
                JOptionPane.PLAIN_MESSAGE);

【问题讨论】:

  • 因为从用户那里删除焦点提示可以帮助他们,如何?如果真的有那么大的问题,那么也许你应该考虑推出自己的对话
  • 发布的代码在屏幕截图方面不一致/不完整 - “返回”按钮来自哪里?

标签: java swing jbutton


【解决方案1】:

在这种情况下,您可能需要一个全局事件侦听器,以便在消息对话框出现时清除焦点。这是一个例子:

import java.awt.AWTEvent;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.FocusEvent;

import javax.swing.FocusManager;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class TestFocus {

    private final AWTEventListener focusListener = this::removeFocus;
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new TestFocus()::initUI);
    }
    
    private void initUI() {
        Toolkit.getDefaultToolkit().addAWTEventListener(focusListener, AWTEvent.FOCUS_EVENT_MASK);
        JOptionPane.showMessageDialog(null, "Here is no Focus on button", "No focus!", JOptionPane.PLAIN_MESSAGE);
        Toolkit.getDefaultToolkit().removeAWTEventListener(focusListener); // to be safe remove it twice.
    }
    
    private void removeFocus(AWTEvent e) {
        if (e instanceof FocusEvent && ((FocusEvent) e).getID() == FocusEvent.FOCUS_GAINED) {
            Toolkit.getDefaultToolkit().removeAWTEventListener(focusListener);
            FocusManager.getCurrentKeyboardFocusManager().clearFocusOwner();
        }
    }
}

【讨论】:

    猜你喜欢
    • 2012-12-17
    • 1970-01-01
    • 2015-09-14
    • 2011-05-06
    • 1970-01-01
    • 2020-10-20
    • 2020-03-27
    • 2021-03-15
    • 2013-12-05
    相关资源
    最近更新 更多