有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在构造函数外部添加鼠标侦听器

在下面的示例中,当您按下按钮和按钮2时,按钮和按钮2都会变得不可点击。当您按下重置按钮时,两个禁用的按钮应再次工作

由于我通过移除两个按钮的MouseListener使其不可点击,如何使用check()方法重新添加MouseListener,使它们仍然以相同的方式工作

public static boolean isreset = false;
public static JButton button = new JButton("Disable button 1");
public static JButton button2 = new JButton("Disable button 2");
public static JButton reset = new JButton("Reset all buttons");

Test() {
    setTitle("Button Test");
    setSize(420, 80);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel buttons = new JPanel(new GridBagLayout());
    GridBagConstraints gc = new GridBagConstraints();
    gc.fill = GridBagConstraints.BOTH;
    gc.gridheight = 1;
    gc.gridwidth = 1;

    gc.gridx = 0;
    gc.gridy = 0;
    buttons.add(button, gc);

    gc.gridx = 1;
    gc.gridy = 0;
    buttons.add(button2, gc);

    gc.gridx = 3;
    gc.gridy = 0;
    buttons.add(reset, gc);

    add(buttons);

    button.addMouseListener(new Mouse(){
        public void mousePressed(MouseEvent e){
            button.setEnabled(false);
            button.removeMouseListener(this);
            System.out.println("You pressed button 1.");
            isreset = false;
            check(isreset);
        }
    });

    button2.addMouseListener(new Mouse(){
        public void mousePressed(MouseEvent e){
            button2.setEnabled(false);
            button2.removeMouseListener(this);
            System.out.println("You pressed button 2.");
            isreset = false;
            check(isreset);
        }
    });

    reset.addMouseListener(new Mouse(){
        public void mousePressed(MouseEvent e){
            isreset = true;
            check(isreset);
        }
    });

    setVisible(true);
}

public static void check (boolean input){
    if(input == true){
        Test.button.setEnabled(true);
        Test.button.addMouseListener(this); //error here
        Test.button2.setEnabled(true);
        Test.button2.addMouseListener(this); //error here
    }
}   

共 (1) 个答案

  1. # 1 楼答案

    代码中的所有内容都是static。这不是编写JFrame子类的方式。我建议您先阅读一些示例代码

    您不必每次都删除鼠标侦听器。打电话就够了

    此外,您应该调用addActionListener,而不是addMouseListener

    例如:

    button.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            button.setEnabled(false);
            System.out.println("You pressed button 1.");
            isreset = false;
            check(isreset);
        }
    });