Раскраска JButton в Java - PullRequest
       26

Раскраска JButton в Java

2 голосов
/ 05 октября 2011

Я борюсь с проблемой раскраски массива JButtons.

Я сделал два массива кнопок J:

public JButton Speler1[] = new JButton[140]; //Player1
public JButton Speler2[] = new JButton[140]; //Player2

Эти два набора кнопок превращают полосу 1 и полосу 2 в гоночную игру. Я хочу, чтобы положение игроков 1 и 2 было окрашено на обоих экранах. Таким образом, игрок 1 может видеть, где находится игрок 2, и наоборот.

Я уже создал метод, который отправляет позиции обоих игроков друг другу.

if (message.contains("Positie")) {
   String posit = message.replaceFirst("Positie", "");
   int positi = Integer.valueOf(posit);
   positie2 = positi;
   kleurHokje kleur = new kleurHokje();
   kleur.hokVerkleur(positi); // positi is the position of each player
}

Поэтому, когда я вызываю метод hokVerkleur (positi), я хочу изменить кнопку на полосе 2.

class kleurHokje{
    public void hokVerkleur(int loc){
        Speler2[loc].setBackground(Color.yellow);
        Speler2[positie2].setBackground(Color.gray);                
    }
}

Это просто не будет работать. Хотя я делаю почти то же самое для Speler1 [positie], за исключением того, что Speler1 не использует сеть, которая работает так, как я хочу.

Любая помощь приветствуется,

Спасибо, Джеф

Edit: Если я помещаю свой код в один из MouseListener, он работает нормально, но вместо этого он должен быть окрашен автоматически вместо того, чтобы каждый раз щелкать.

 class Klaar extends MouseAdapter {

    public void mouseClicked(MouseEvent e) {            
        Speler2[positie2].setBackground(Color.gray);
    }
}

Ps. Мой родной язык не английский, надеюсь, вы понимаете мою проблему.

Ответы [ 2 ]

4 голосов
/ 05 октября 2011
If I place my code in one of the MouseListeners it works fine:

согласен, если вы измените Color для JButton из BackGroung Task, то при каких-либо изменениях у вас возникнут проблемы с Concurency в Swing , ваш обновленный графический интерфейс не соответствует EDT,

1) тогда вы должны обернуть раскрашенные JButtons в invokeLater ();

    java.awt.EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            Speler2[loc].setBackground(Color.yellow);
            Speler2[positie2].setBackground(Color.gray);
        }
    });

2), но вы должны решить, используя обычные методы Swing

2a), оберните связанный с GUI код в javax.swing.Action

2b) инициализация заданий BackGroung с

0 голосов
/ 06 октября 2011

Сделано беговой нитью, работает как брелок.Спасибо всем за помощь.

public void actionThread() {
    Thread t = new Thread() {

        public void run() {
            while (!stop) {
                tegenspelerPositie();
                Score();
                eigenOgen();
                try {
                    sleep(100);
                } catch (InterruptedException ex) {
                }
            }
        }
    };
    t.start();
}
...