Java,JCheckbox - 消耗/阻止所有事件,但仍然启用

标签 java swing events jcheckbox

我有一个图标,旁边有一个复选框,包含在一个面板中。面板有悬停效果,点击面板时想选中框。

我想使用或阻止复选框的所有事件,仅以编程方式选择它。我希望该框在屏幕上显示为“已启用”,而“在幕后”几乎不起作用。 (在面板中单击即可进行选择。)

此外,当我用鼠标进入/退出复选框时,我不希望发生任何事情。我在面板上有悬停效果。现在,我可以进入面板,但是当我进入框时,面板退出,并且看起来没有悬停。

那么,我怎样才能阻止此复选框上所有与鼠标相关的 Activity - 进入、退出、单击等。从之前的研究中,我想起了流行语“消费事件”,但我做不到似乎鼓动了适当的搜索来实现这一点:)

============

编辑

enter image description here

这个面板(紫色)有一个图标(汉堡包)和一个复选框(UI LAF)。我想悬停面板,而不是在输入复选框时失去悬停状态,并在单击(父)面板时切换复选框。

最佳答案

覆盖 EventQueuepush() 中的 dispatchEvent() 一个新实例,然后替换旧实例。在您的新实现中,为所有事件调用 super.dispatchEvent() 与您的复选框相关的事件除外。可以找到相关示例 here ,完整的实现可以在 Disabled Panel 中找到。 .

或者,使用 Toolkit.getDefaultToolkit().addAWTEventListener(),如图所示 here , 以消除不需要的事件。

附录:另请考虑利用复选框按钮模型的这种更加用户友好的替代方案:

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

/** @see https://stackoverflow.com/a/10238761/230513 */
public class PanelClick extends JPanel {

    JCheckBox jcb = new JCheckBox("Check");
    private boolean selected = jcb.isSelected();

    public PanelClick() {
        this.setPreferredSize(new Dimension(320, 240)); // room to click
        this.add(jcb);
        this.addMouseListener(new MouseAdapter() {

            @Override
            public void mousePressed(MouseEvent e) {
                selected = !jcb.isSelected();
                jcb.setSelected(selected);
            }
        });
    }

    private void display() {
        JFrame f = new JFrame("PanelClick");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new PanelClick().display();
            }
        });
    }
}

关于Java,JCheckbox - 消耗/阻止所有事件,但仍然启用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10238592/

相关文章:

java - Stacktrace 的异常仅包含 Java 库调用

java - 在运行时自动重新加载 Swing 中的页面

jquery - 如何将鼠标事件发送到ajaxSetup beforeSend?

java - 不使用数据库的 Java 应用程序如何存储以前的信息并显示它

java - 为什么这个 Java 程序的第 17 行没有被执行?

java - 如何设置JTable的行大小?

java - 如何异步读取标准输入?

cocoa - 如何忽略 os x 中的热键

java - 如何在 XSLT 中的新行中拆分和中断字符串

java - 使用 jSTL 检查字符串中是否只有数字