簡體   English   中英

JButton數組的ActionListener值

[英]JButton array ActionListener value

for(gbc.gridy = 3; gbc.gridy > 0; gbc.gridy--)
        for(gbc.gridx = 0; gbc.gridx < 3;gbc.gridx++)
          {
            grid[btnNum] = new JButton("" + (btnNum+1));
            grid[btnNum].setPreferredSize(new Dimension(75,75));
            frame.add(grid[btnNum], gbc);
            grid[btnNum].addActionListener(this);
            grid[btnNum].addKeyListener(this);
            btnNum++;
          }

我有一個按鈕陣列顯示在3x3網格中,每個按鈕都有一個動作監聽器。

public void actionPerformed(ActionEvent e){
        String output = "";
        if(e.getSource() == grid[0]){
            System.out.println("button 1");
        }
}

這不正確嗎?

上下文中的完整示例:

public class ButtonGrid implements ActionListener, KeyListener{

    JFrame frame=new JFrame(); //creates frame
    JButton[] grid; //names the grid of buttons




    public ButtonGrid(){ //constructor
            frame.setTitle("MPC");
            frame.setLayout(new GridBagLayout()); //set layout
            JButton[] grid=new JButton[12]; //allocate the size of grid

            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            int btnNum = 0;

            grid[9] = new JButton("0");
            grid[9].setPreferredSize(new Dimension(75,75));
            grid[10] = new JButton("-");
            grid[10].setPreferredSize(new Dimension(75,75));
            grid[11] = new JButton("=");
            grid[11].setPreferredSize(new Dimension(75,75));
            frame.add(grid[9], gbc);
            gbc.gridx++;
            frame.add(grid[10], gbc);
            gbc.gridx++;
            frame.add(grid[11], gbc);

            for(gbc.gridy = 3; gbc.gridy > 0; gbc.gridy--)
                for(gbc.gridx = 0; gbc.gridx < 3;gbc.gridx++){
                    grid[btnNum] = new JButton("" + (btnNum+1));
                    grid[btnNum].setPreferredSize(new Dimension(75,75));
                    frame.add(grid[btnNum], gbc);
                    grid[btnNum].addActionListener(this);
                    grid[btnNum].addKeyListener(this);
                    btnNum++;
                }
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack(); //sets appropriate size for frame
            frame.setVisible(true); //makes frame visible
 }
 public static void main(String[] args) {

        new ButtonGrid();//makes new ButtonGrid with 2 parameters


    }
 public void actionPerformed(ActionEvent e){
        String output = "";
        if(e.getSource() == grid[0]){
            System.out.println("button one");
            //playSound(abc.kick);
        }}

ActionListener中的grid變量為null。 我的賭注 - 你正在影響變量。

解決方案:確保初始化網格字段,而不是本地網格變量

public class ButtonGrid implements ActionListener, KeyListener{

    JFrame frame=new JFrame(); 
    JButton[] grid; // grid field remains null

    public ButtonGrid(){ 
            frame.setTitle("MPC");
            frame.setLayout(new GridBagLayout()); 
            JButton[] grid=new JButton[12]; //  ****** a LOCAL variable ******

在指定的行中,您將創建陰影變量。 這意味着因為您在構造函數中重新聲明了網格,所以只初始化局部變量,而不初始化類中聲明的字段,使字段為null。 解決方案:不要重新聲明網格。 將其更改為:

public class ButtonGrid implements ActionListener, KeyListener{

    JFrame frame = new JFrame(); 
    JButton[] grid; 

    public ButtonGrid(){
            frame.setTitle("MPC");
            frame.setLayout(new GridBagLayout()); 
            grid = new JButton[12]; //  ***** this initializes the field ******

嘗試這個。

public void actionPerformed(ActionEvent e){
        String output = "";
   for(int i=0; i<=grid.length; i++){
       if(e.getSource() == grid[i]){
            System.out.println("button "+i);
       }
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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