gpt4 book ai didi

java - JCheckbox 仅通过 Controller 更改其状态

转载 作者:行者123 更新时间:2023-12-01 13:43:00 25 4
gpt4 key购买 nike

普通 JCheckbox 直接对用户输入使用react并设置或取消设置勾号。此后,将调用 MouseListener。我想要实现的是 JCheckbox 的状态只能由 Controller 更改。有什么好的方法可以实现这一目标?

我尝试添加一个鼠标监听器,它会立即再次添加/删除勾号,但这会导致闪烁。

我发现的唯一方法是覆盖 processMouseEvent 方法,但这真的很糟糕......

编辑(我当前的版本):现在这确实有效。之前错过调整模型。

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.EventListener;
import javax.swing.JCheckBox;

public class MyJCheckBox extends JCheckBox {
public MyJCheckBox() {
MouseListener[] ml = (MouseListener[]) this.getListeners(MouseListener.class);

for (int i = 0; i < ml.length; i++) {
this.removeMouseListener(ml[i]);
this.addMouseListener(new MouseListenerWrapper(ml[i]));
}

}

public void addClickListener(ClickListener listener) {
listenerList.add(ClickListener.class, listener);
}

private class MouseListenerWrapper implements MouseListener {
MouseListener listener;

public MouseListenerWrapper(MouseListener listener) {
this.listener = listener;
}

@Override
public void mouseClicked(MouseEvent e) {
listener.mouseClicked(e);
}

@Override
public void mousePressed(MouseEvent e) {
listener.mousePressed(e);
}

@Override
public void mouseReleased(MouseEvent e) {
for(ClickListener listener : listenerList.getListeners(ClickListener.class)) {
listener.onClick();

//Adjust model
MyJCheckBox.this.getModel().setArmed(false);
MyJCheckBox.this.getModel().setPressed(false);
}

}

@Override
public void mouseEntered(MouseEvent e) {
listener.mouseEntered(e);
}

@Override
public void mouseExited(MouseEvent e) {
listener.mouseExited(e);
}
}
}

interface ClickListener extends EventListener {
public void onClick();
}

最佳答案

我不喜欢人们玩弄用户界面。这会让用户感到困惑,如果他们无法单击该复选框,他们会认为应用程序已损坏。

无论如何,从复选框中删除 MouseListener。

MouseListener[] ml = (MouseListener[])checkBox.getListeners(MouseListener.class);

for (int i = 0; i < ml.length; i++)
checkBox.removeMouseListener( ml[i] );

关于java - JCheckbox 仅通过 Controller 更改其状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20553308/

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