JButton没有响应鼠标单击

问题描述

这是我从先前的问题中收到的示例中复制并改编的

我目前有2个问题

首先,我只能让一个JButton出现在屏幕上,然后当我按下它时JButton没有响应。 另外,如何阻止第一个方块出现?

我知道程序位于一个大BTM ATM中,一旦解决了这些问题,我将分为几个类。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SwingPaintDemo3 {

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI(); 
        }
    });
}

static void createAndShowGUI() {
    System.out.println("Created GUI on EDT? "+
    SwingUtilities.isEventDispatchThread());
    JFrame f = new JFrame("Swing Paint Demo");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.add(new MyPanel());
    f.pack();
    f.setLayout(null);
    JButton seed = new JButton ("Seed");
    seed.setBounds(1050,50,100,50);
    f.add(seed);
    seed.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
        System.out.println("Start");
}   
});
    JButton start = new JButton ("Start");
    start.setBounds(1050,150,50);
    
    
    f.add(start);
    JButton stop = new JButton ("Stop");
    stop.setBounds(1050,250,50);
    //f.add(stop);
    JButton reset = new JButton ("Reset");
    reset.setBounds(1050,350,50);
    //f.add(reset);
    f.setVisible(true);
    int lifegrid [] [] [] = new int [42] [62] [2];
    for (int i=0; i<42; i++) {
        for (int j=0; j<62; j++) {
            lifegrid [i] [j] [0] = 0;
            lifegrid [i] [j] [1] = 0;
                        }
    }
        } 
}



  class MyPanel extends JPanel {
int lifegrid [] [] [] = new int [62] [42] [2];
int squareX = 0;
int squareY = 0;
int gridX = 0;
int gridY = 0;

public MyPanel() {

          addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            squareX = e.getX();
            squareY = e.getY();
            if ((squareX>50 & squareX<950) & (squareY>50 & squareY <650) ){
                gridX =(squareX-50)/15+1;
                gridY =(squareY-50)/15+1;
                squareX = (squareX -50)/15 * 15 + 50;
                squareY = (squareY -50)/15 * 15 + 50;
                lifegrid [gridX] [gridY] [0] = 1;
                System.out.println(gridX + " " + gridY);
                repaint(squareX,squareY,15,15);}
            else {}
        }
        });
          
               }

public Dimension getPreferredSize() {
    return new Dimension(1280,800);
}

protected void paintComponent(Graphics g) {
    super.paintComponent(g);       
    g.setColor(Color.RED);
    g.fillRect(squareX,13,13);
    g.setColor(Color.BLACK);
    g.drawRect(squareX,13);
}  
}

解决方法

您有2个按钮。

一个按钮的面孔显示为“种子”。当您按下它时,您的动作监听器将打印“开始”。

另一个按钮的正面显示为“开始”。它没有动作侦听器,因此,如果按下该按钮,则不会发生任何事情。

来源:只是..阅读您的代码,就在这里。

我认为那是一个错误。如果不是这样,那就很令人困惑:为什么按下 NOT 上面写有“开始”的按钮,然后将“开始”打印到sysout中?

然后将两个按钮都添加到具有可疑布局的面板中。

我假设您按下的是唯一可以看到的按钮(上面带有“开始”),因为它位于另一个按钮的顶部,而您什么也没看到。

这正是您编程的内容。

可能的解决方案:

  • 修复布局,或使用布局管理器。然后按下右键(显示“种子”的按钮)
  • 在“开始”按钮上添加一个动作侦听器,并使其显示“开始”。
  • 修复了单击“种子”按钮会打印“开始”的错误。您应该将其打印为“种子”。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...