有什么办法可以禁用鼠标点击吗?面板中有不同的组件,对于某些按钮单击事件,我想禁用鼠标单击。我的意思是单击鼠标对组件没有任何影响。我可以禁用
setEnabled()
功能,但我不想这样做。
有什么办法可以禁用鼠标点击吗?
情况:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
//..disable the mouse click on each component present inside the panel
}
您可以向所有按钮添加扩展的 ActionListener,如下所示:
public abstract class ExtendedActionListener implements ActionListener{
private static boolean disabled = false;
public static void setDisabled(boolean disabled){
ExtendedActionListener.disabled = disabled;
}
@Override
public final void actionPerformed(ActionEvent e){
if(disabled)
return;
doSomething;
}
}
现在只需通过调用方法
setDisabled(false)
禁用所有ActionListener。按钮的视觉行为根本没有改变,但是当您单击它时什么也没有发生。
如果视觉点击行为并不重要,那么您可以删除 MouseListeners。
您可以像这样创建一个按钮组:
public class SingleSelectionButtonGroup {
private final List<JButton> buttons;
public static SingleSelectionButtonGroup group(List<JButton> buttons) {
return new SingleSelectionButtonGroup(buttons);
}
public static SingleSelectionButtonGroup group(JButton...buttons) {
return new SingleSelectionButtonGroup(Arrays.asList(buttons));
}
private SingleSelectionButtonGroup(List<JButton> buttons) {
this.buttons = new ArrayList<JButton>(buttons);
setupListener();
}
private void setupListener() {
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
SingleSelectionButtonGroup.this.disableAllExcept((JButton) e.getSource());
}
};
for (JButton button : buttons) {
button.addActionListener(listener);
}
}
private void disableAllExcept(JButton clickedButton) {
for (JButton button : buttons) {
if (!clickedButton.equals(button)) {
button.setEnabled(false);
}
}
}
}
然后将其与您想要分组的按钮集合一起使用:
public class Application {
public void run() {
final JFrame frame = new JFrame("test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(400, 300));
final JPanel pane = new JPanel();
List<JButton> buttons = new ArrayList<JButton>();
String[] texts = {"A", "B", "C"};
for (String text : texts) {
JButton button = new JButton(text);
buttons.add(button);
pane.add(button);
}
SingleSelectionButtonGroup.group(buttons);
frame.getContentPane().add(pane);
frame.setVisible(true);
}
public static void main(String[] args) {
new Application().run();
}
}
您应该使用侦听器的一个公共类,并使用静态方法来打开和关闭侦听器
public abstract class BaseMouseListener implements ActionListener{
private static boolean active = true;
public static void setActive(boolean active){
BaseMouseListener.active = active;
}
protected abstract void doPerformAction(ActionEvent e);
@Override
public final void actionPerformed(ActionEvent e){
if(active){
doPerformAction(e);
}
}
}
你的听众必须实现
doPerformedAction()
添加空鼠标监听器。这将“禁用”点击,因为它不会产生任何效果。