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