2014-12-28 5 views
0

나는 int a를 가지고있다; 메인 클래스에서는 Action Listner 클래스에서 사용하고 싶습니다. 나는 해답을 찾았지만 실제로 어떤 프로그래밍에 익숙하지 않은 이래로해야 할 일이 무엇인지 이해하지 못했습니다. 가능한 한 간단한 해결책을 고맙게 생각하는 것입니다.java에서 다른 클래스의 기본 클래스에서 int에 액세스하는 방법은 무엇입니까?

여기 내 코드입니다 :

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


} 

감사를 것입니다.

+1

가 선언 것 : 주요 방법에서

public class Listener implements ActionListener { JButton[][] gumbi; final int a; public Listener(JButton[][] gumbi, int a) { this.gumbi = gumbi; this.a = a; } ... 

은 단순히 다음과 같이 리스너를 추가하는 방법을 변경합니다. 어디서나 액세스 할 수 없습니다. – Lucas

+0

현재 구현 int는 main 메소드에 정의되어 있고 메소드에서 선언 된 모든 것은 메소드에 로컬이 될 것이므로 실제로 기본을 올바르게 가져야합니다. 이제는 int를 public static int로 정의 할 수 있습니다. , –

답변

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; 
+0

고맙습니다. 이것은 내 문제를 해결했다. – minus

1

현재 구현 int는 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; 
} 
0

아래와 같이하고 그것이 심지어 불구하고, 클래스 이름을 참조하여 변수에 액세스 정확히 무엇이 요구되었는지는 알 수 없습니다.

메인에서 a의 값을 가져 오는 대신 Listener의 생성자에있는 a의 값을 보내려는 것이 좋습니다. 그것은 지역 변수 만드는`main` 방법에

gumbi[i][j].addActionListener(new Listener(gumbi, a)); 
관련 문제