繁体   English   中英

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

[英]How to acces an int from the main class in another class in java?

我有一个 在主类中,我想在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);
            }
        }
    }


}
}

这就是我在动作监听器中所拥有的

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);
    }
}


}

谢谢你的时间。

将该int a定义为具有公共访问权限的静态对象,并从您的main方法中删除其定义,如下所示:

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;

在您当前的实现中,int是在main方法中定义的,并且在方法中声明的任何内容都将是该方法的局部信息,您确实必须掌握基本知识,因为现在您可以在main方法之外将int定义为public static int,然后使用类名引用访问变量,如下所示

public class Start {

    public static int a ;
    public static void main() {
         //your logic
    }
}

public class Listener implements ActionListener {
    int temp = Start.a;
}

尽管我同意另一个答案,即您可以在主类中使用静态语言,但可能存在更整洁的解决方案,即使这并非要求的完全一样。

与其尝试从主节点获取a的值, ListenerListener的构造函数中发送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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM