问题描述
这是我从先前的问题中收到的示例中复制并改编的
我目前有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中?
然后将两个按钮都添加到具有可疑布局的面板中。
我假设您按下的是唯一可以看到的按钮(上面带有“开始”),因为它位于另一个按钮的顶部,而您什么也没看到。
这正是您编程的内容。
可能的解决方案:
- 修复布局,或使用布局管理器。然后按下右键(显示“种子”的按钮)
- 在“开始”按钮上添加一个动作侦听器,并使其显示“开始”。
- 修复了单击“种子”按钮会打印“开始”的错误。您应该将其打印为“种子”。