2014-12-28 11 views
0

Я не понимаю int a; в основном, что я назвал st в прослушителе Action. Я хочу, чтобы st уменьшалась на 1 каждый раз, когда нажата кнопка cetain, но кажется, что она работает отдельно для каждой кнопки. Я сделал это так, чтобы он записывал его на кнопку каждый раз, когда я нажимаю другую кнопку, чтобы проверить ее, и она работает только для первой кнопки, а затем она остается неизменной. (Я надеюсь, что я никакого смысла)использование переменных в разных классах в Java

Вот мой код, главный класс:

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 int a; 
public static JButton[][] gumbi = new JButton[15][15]; 

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

    JPanel polje = new JPanel(new GridLayout(15, 15)); 
    panel.add(polje, BorderLayout.CENTER); 
    a = 0; 

    for (int i = 0; i < 15; i++) { 
     for (int j = 0; j < 15; j++) { 
      if (i < 5 && j < 5) { 
       gumbi[i][j] = new JButton(); 
       gumbi[i][j].setBackground(Color.GREEN); 
       // 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); 

      } 
     } 
    } 


} 
} 

и ActionListener:

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 = Start.gumbi; 
int st = Start.a; 

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); 
    } 
    if(gumb.getBackground() == Color.WHITE && gumb.getText() == "3"){ 
     st -= 1; 

    } else if (gumb.getBackground() == Color.BLACK && gumb.getText() == "3"){ 
     st += 1; 
     gumbi[0][0].setText("" + st); 
    } 
} 


} 

ответ

0

Проблема заключается в том, что вы создали копию Static Variable (Start.a) к переменной экземпляра (st), которая будет индивидуальной копией для каждого экземпляра прослушивателя действий.

Если вам действительно нужно поддерживать значение на уровне класса, почему бы не манипулировать значением напрямую, а сохранить копию.

if(gumb.getBackground() == Color.WHITE && gumb.getText() == "3"){ 
    Start.a -= 1; 

} else if (gumb.getBackground() == Color.BLACK && gumb.getText() == "3"){ 
    Start.a += 1; 
    gumbi[0][0].setText("" + st); 
} 
0

Ваша линия

int st = Start.a; 

не делать то, что вы думаете. Он считывает значение a при создании экземпляра и копирует его значение в новую переменную st. Изменение st не повлияет на a, потому что вы меняете только копию; и у вас есть новая копия для каждого созданного вами экземпляра.

Попробуйте изменить Start.a прямо, а не копировать его в новый st и изменить его.

Смежные вопросы