我有一个int;在主类中,我想在Action Listner类中使用它。我已经检查了答案,但我并不真正理解我必须做的事情,因为我仍然只是一个任何类型编程的开始,所以如果它可能我真的很感激一个简单的解决方案。
这是我的代码:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Start {
public static void main(String[] args){
JFrame okno = new JFrame("Nonogram");
okno.setVisible(true);
okno.setSize(700, 700);
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout());
okno.add(panel);
JButton [][] gumbi = new JButton[15][15];
JPanel polje = new JPanel(new GridLayout(15, 15));
panel.add(polje, BorderLayout.CENTER);
int a = 1;
int b = 1;
for(int i = 0; 0 < 15; i++){
for(int j = 0; j < 15; j++){
if(i < 5 && j < 5){
gumbi[i][j] = new JButton();
gumbi[i][j].setBackground(Color.RED);
//gumbi[i][j].addActionListener(new Listener(gumbi));
polje.add(gumbi[i][j]);
}else if(i < 5 || j < 5){
gumbi[i][j] = new JButton();
gumbi[i][j].setBackground(Color.YELLOW);
//gumbi[i][j].addActionListener(new Listener(gumbi));
polje.add(gumbi[i][j]);
gumbi[i][j].setEnabled(false);
}else{
if(Math.random() <= 0.6){
gumbi[i][j] = new JButton();
gumbi[i][j].setBackground(Color.WHITE);
gumbi[i][j].addActionListener(new Listener(gumbi));
gumbi[i][j].setText("3");
polje.add(gumbi[i][j]);
}else {
gumbi[i][j] = new JButton();
gumbi[i][j].setBackground(Color.WHITE);
gumbi[i][j].addActionListener(new Listener(gumbi));
gumbi[i][j].setText("4");
polje.add(gumbi[i][j]);
}
}
if(gumbi[i][j].getText() == "3"){
a += 1;
}
if(i == 14 && j == 14){
gumbi[i][j].setText("" + a);
}
}
}
}
}
这就是我在Action Listener中所拥有的
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class Listener implements ActionListener {
JButton[][] gumbi;
public Listener(JButton[][] gumbi) {
this.gumbi = gumbi;
}
public void actionPerformed(ActionEvent e){
JButton gumb = (JButton) e.getSource();
if( gumb.getBackground() == Color.WHITE){
gumb.setBackground(Color.BLACK);
} else if (gumb.getBackground() == Color.BLACK){
gumb.setBackground(Color.WHITE);
}
}
}
感谢您的时间。
答案 0 :(得分:2)
将int a
定义为具有公共访问权限的静态,并从主方法中删除它的定义,如下所示:
public class Start {
public static int a = 1;//static since you want to use in static method
public static void main(String[] args){
然后在你的监听器调用中,你可以使用.variable,如下所示:
int number = Start.a;
答案 1 :(得分:1)
在你当前的实现中,int是在main方法中定义的,并且在方法中声明的任何东西都是方法的本地,你真的必须得到正确的基础知识,现在你可以将int定义为一个公共的静态int a main方法,然后使用类名引用访问变量,如下所示
public class Start {
public static int a ;
public static void main() {
//your logic
}
}
public class Listener implements ActionListener {
int temp = Start.a;
}
答案 2 :(得分:0)
虽然我同意另一个答案,你可以在主类中制作一个静态的,但可能有一个更简洁的解决方案,即使它并不是所要求的。
不是试图从main获取a的值,而是在Listener
的构造函数中发送a的值更有意义。
public class Listener implements ActionListener {
JButton[][] gumbi;
final int a;
public Listener(JButton[][] gumbi, int a) {
this.gumbi = gumbi;
this.a = a;
}
...
在main方法中,只需更改添加侦听器的方法,如下所示:
gumbi[i][j].addActionListener(new Listener(gumbi, a));