Java 如何使用构造函数外部的按钮?
我正在尝试用java创建一个幻灯片拼图。我在构造函数中创建了一个包含9个按钮(3x3)的数组。现在,我想让按钮滑动(用空文本按钮交换位置),或者只交换文本。但在当前代码中,当我单击按钮时,在运行时会出现空指针异常。我认为这是因为我在构造函数中创建的按钮对象在actionPerformed函数中不可访问。如何访问功能中的按钮Java 如何使用构造函数外部的按钮?,java,swing,nullpointerexception,jbutton,Java,Swing,Nullpointerexception,Jbutton,我正在尝试用java创建一个幻灯片拼图。我在构造函数中创建了一个包含9个按钮(3x3)的数组。现在,我想让按钮滑动(用空文本按钮交换位置),或者只交换文本。但在当前代码中,当我单击按钮时,在运行时会出现空指针异常。我认为这是因为我在构造函数中创建的按钮对象在actionPerformed函数中不可访问。如何访问功能中的按钮 package game1; import javax.swing.*; import java.awt.event.*; import java.awt.*; import
package game1;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class Shuffle implements ActionListener
{
JFrame f;
JButton b[][];
public Shuffle()
{
int i,j;
f=new JFrame("Shuffle");
f.setLayout(new GridLayout(3,3));
f.setVisible(true);
JButton b[][]=new JButton[3][3];
/*
for(int i=0;i<button.length;i++)
{
button[i] = new JButton();
button[i].setText(Integer.toString(i+1));
}
*/
int t=1;
for (i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(i==2 && j==2)
{
b[i][j]=new JButton();
f.add(b[i][j]);
t=t+1;
}
else
{
b[i][j]=new JButton(""+t+"");
f.add(b[i][j]);
t=t+1;
}
}
}
for (i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
b[i][j].addActionListener(this);
}
}
}
public void actionPerformed(ActionEvent e)
{
int x,y;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(e.getSource()==b[i][j])
{
x=i;y=j;
System.out.println(x+" "+y);
}
}
}
}
public static void main(String[] args)
{
new Shuffle();
}
}
packagegame1;
导入javax.swing.*;
导入java.awt.event.*;
导入java.awt.*;
导入java.awt.event.ActionEvent;
公共类Shuffle实现ActionListener
{
jf框架;
JButton b[][];
公开洗牌
{
int i,j;
f=新JFrame(“洗牌”);
f、 setLayout(新网格布局(3,3));
f、 setVisible(真);
JButton b[][]=新JButton[3][3];
/*
对于(int i=0;i您已经在构造函数中声明了一个局部变量b
,它隐藏了字段b
。不要这样做。而不是
JButton b[][] = new JButton[3][3];
只要写
b = new JButton[3][3];
它将数组分配给字段,而不是局部变量。您在构造函数中声明了一个局部变量b
,它隐藏了字段b
。不要这样做。而不是
JButton b[][] = new JButton[3][3];
只要写
b = new JButton[3][3];
这将把数组分配给字段,而不是一个局部变量。更改按钮初始化:
JButton b[][]=new JButton[3][3];
为此:
b=new JButton[3][3];
从以下位置更改按钮初始化:
JButton b[][]=new JButton[3][3];
为此:
b=new JButton[3][3];
尝试此代码
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
class Shuffle implements ActionListener {
JFrame f;
JButton b[][]=new JButton[3][3]; //This is where I changed the code
public Shuffle() {
int i, j;
f = new JFrame("Shuffle");
f.setLayout(new GridLayout(3, 3));
f.setVisible(true);
//JButton b[][] = new JButton[3][3]; //This is where I changed the code
/* for(int i=0;i<button.length;i++){
button[i] = new JButton();
button[i].setText(Integer.toString(i+1));
} */
int t = 1;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
if (i == 2 && j == 2) {
b[i][j] = new JButton();
f.add(b[i][j]);
t = t + 1;
} else {
b[i][j] = new JButton("" + t + "");
f.add(b[i][j]);
t = t + 1;
}
}
}
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
b[i][j].addActionListener(this);
}
}
}
public void actionPerformed(ActionEvent e) {
System.out.println(""+e.getSource());
int x, y;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (e.getSource() == b[i][j]) {
x = i;
y = j;
System.out.println(x + " " + y);
}
}
}
}
public static void main(String[] args) {
new Shuffle();
}
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
类Shuffle实现ActionListener{
jf框架;
JButton b[][]=新JButton[3][3];//这就是我更改代码的地方
公开洗牌{
int i,j;
f=新JFrame(“洗牌”);
f、 setLayout(新的GridLayout(3,3));
f、 setVisible(真);
//JButton b[][]=新JButton[3][3];//这就是我更改代码的地方
/*对于(int i=0;i请尝试此代码
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
class Shuffle implements ActionListener {
JFrame f;
JButton b[][]=new JButton[3][3]; //This is where I changed the code
public Shuffle() {
int i, j;
f = new JFrame("Shuffle");
f.setLayout(new GridLayout(3, 3));
f.setVisible(true);
//JButton b[][] = new JButton[3][3]; //This is where I changed the code
/* for(int i=0;i<button.length;i++){
button[i] = new JButton();
button[i].setText(Integer.toString(i+1));
} */
int t = 1;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
if (i == 2 && j == 2) {
b[i][j] = new JButton();
f.add(b[i][j]);
t = t + 1;
} else {
b[i][j] = new JButton("" + t + "");
f.add(b[i][j]);
t = t + 1;
}
}
}
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
b[i][j].addActionListener(this);
}
}
}
public void actionPerformed(ActionEvent e) {
System.out.println(""+e.getSource());
int x, y;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (e.getSource() == b[i][j]) {
x = i;
y = j;
System.out.println(x + " " + y);
}
}
}
}
public static void main(String[] args) {
new Shuffle();
}
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
类Shuffle实现ActionListener{
jf框架;
JButton b[][]=新JButton[3][3];//这就是我更改代码的地方
公开洗牌{
int i,j;
f=新JFrame(“洗牌”);
f、 setLayout(新的GridLayout(3,3));
f、 setVisible(真);
//JButton b[][]=新JButton[3][3];//这就是我更改代码的地方
/*为了(int i=0;iThanks太多了。我总是在初始化数组时遇到问题该死!我不知道该接受哪个答案!它们都是正确的!非常感谢。我总是在初始化数组时遇到问题该死!我不知道该接受哪个答案!它们都是正确的!非常感谢!我不知道该接受哪个答案。它们都是正确的!没问题,很高兴我能帮忙:)非常感谢!我不知道该接受哪个答案。他们都是正确的!没问题,很高兴我能帮忙:)非常感谢!所有答案都是正确的!不知道该接受哪一个作为正确答案。非常感谢!所有答案都是正确的!不知道该接受哪一个作为正确答案。