如何从java中另一个类的主类访问int?

时间:2014-12-28 14:05:43

标签: java

我有一个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);
    }
}


}

感谢您的时间。

3 个答案:

答案 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));