簡體   English   中英

JButton 沒有響應鼠標點擊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM