[英]JButton is not responding to mouse click
這是從我從較早的問題中收到的示例中復制和改編的
我目前有兩個問題
首先,我只能讓一個 JButton 出現在屏幕上,然后當我按下它時 JButton 沒有響應。 另外,如何阻止第一個方塊出現?
我知道這個程序在一個大的 blob 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,100,50);
f.add(start);
JButton stop = new JButton ("Stop");
stop.setBounds(1050,250,100,50);
//f.add(stop);
JButton reset = new JButton ("Reset");
reset.setBounds(1050,350,100,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,squareY,13,13);
g.setColor(Color.BLACK);
g.drawRect(squareX,squareY,13,13);
}
}
你有2個按鈕。
一個按鈕的臉上寫着“種子”。 當您按下它時,您的動作偵聽器將打印“開始”。
另一個按鈕的臉上寫着“開始”。 它沒有動作偵聽器,因此,如果按下,則什么也不會發生。
消息來源:只需……閱讀您的代碼,它就在那里。
我認為這是一個錯誤。 如果不是,那是相當的困惑:為什么按不具有“開始”上寫,打印“開始”,以系統輸出的按鈕?
然后,您將兩個按鈕添加到布局可疑的面板中。
我假設你按下了你能看到的唯一按鈕(上面有“開始”),因為它就在另一個按鈕的頂部,你什么也沒看到。
這正是您編程的內容。
可能的解決方案:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.