gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:44:21 32 4
gpt4 key购买 nike

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

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

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

那么,我怎样才能阻止此复选框上所有与鼠标相关的 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com