gpt4 book ai didi

java - JButton 数组 ActionListener 值

转载 作者:行者123 更新时间:2023-12-02 09:46:29 24 4
gpt4 key购买 nike

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 中为空。我敢打赌——你正在隐藏变量。

解决方案:确保初始化网格字段,而不是本地网格变量

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 ******

在指定的行创建阴影变量。这意味着,因为您在构造函数中重新声明 grid,所以您仅初始化局部变量,而不初始化在类中声明的字段,而使字段为空。解决方案:不要重新声明网格。将其更改为:

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 ******

关于java - JButton 数组 ActionListener 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27241242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com