有没有办法可以禁用鼠标点击?在面板中有不同的组件,对于某些Button Click事件,我想禁用鼠标单击。我的意思是单击鼠标对组件没有任何影响。我可以禁用setEnabled()
功能,但我不想这样做。
有什么办法可以禁用鼠标点击吗?
情况:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
//..disable the mouse click on each component present inside the panel
}
答案 0 :(得分:1)
你应该使用一个普通的听众级别,并使用静态方法打开和关闭转身监听器
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()
答案 1 :(得分:0)
您可以将扩展的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。 Button视觉行为根本不会改变,但是当你点击它时没有任何反应。
如果视觉点击行为无关紧要,那么您只需删除MouseListeners。
答案 2 :(得分:0)
您可以像这样创建一个按钮组:
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();
}
}
答案 3 :(得分:-1)
添加空鼠标监听器。这将“禁用”点击,因为它不会产生任何影响。