Обновление Jlabel во время работы программыJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Обновление Jlabel во время работы программы

Сообщение Anonymous »

В настоящее время я пытаюсь запрограммировать графический интерфейс для игры в реверси (https://en.wikipedia.org/wiki/reversi), используя Java Swing. Часть моей задачи - распечатать текущее количество плиток игрока (синий) и машин (красная) в нижней части моей конфигурации моей кадры в начале. < /P>
Я создал jlabel для Каждый тип плиток и добавлял их в свою собственную jPanel. Однако, когда я пытаюсь обновить этикетки, вся панель начинает либо воспроизводить себя бесконечно повторяет всю плату с каждым поворотом, либо вообще не меняет метку. Я пытался написать коммерческую команду в каждом возможном месте, и все еще ничего не работает. Что я делаю не так? Где мне обновить этикетки?
Вы можете увидеть конструктор класса, ответственный за графический интерфейс ниже. Некоторые неактуальные линии пропускаются, чтобы облегчить чтение кода. < /P>
public Reversi() {
int SIZE = 8;
JFrame frame = new JFrame();
frame.setTitle("Reversi");
//Here I skipped lines, where I set the size and title of a frame.

//A panel, that's added to the bottom of a frame.
JPanel bottom = new JPanel();

JLabel humanPoints = new JLabel();
humanPoints.setForeground(Color.BLUE);
humanPoints.setFont(new Font("Verdana", Font.BOLD, 20));
bottom.add(humanPoints);

//Here I skipped lines, where I implement some other buttons,
//that can be seen in pictures.
//Not relevant for the problem.

JLabel machinePoints = new JLabel();
machinePoints.setForeground(Color.RED);
machinePoints.setFont(new Font("Verdana", Font.BOLD, 20));
bottom.add(machinePoints);

frame.add(bottom, BorderLayout.SOUTH);

//A panel for a board 8x8.
panel = new JPanel(new GridLayout(SIZE, SIZE)) {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
MyTile tile = new MyTile(i, j) {
//Here I skipped lines, where I paint tiles for the board
//Not relevant for the problem
};

tile.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
//A method, that executes a move by player and a
//following move by a machine
checkMove(tile.getPositionX(), tile.getPositionY());

//Trying to update the labels after a move
humanPoints.setText(
String.valueOf(Shell.game.getNumberOfHumanTiles()));
machinePoints.setText(
String.valueOf(Shell.game.getNumberOfMachineTiles()));
} catch (IllegalArgumentException ex) {
JOptionPane.showMessageDialog(null, "Illegal move!",
"Error!", JOptionPane.ERROR_MESSAGE);
} catch (InterruptedException ex) {
JOptionPane.showMessageDialog(null, "It's not machine's turn!",
"Error!", JOptionPane.ERROR_MESSAGE);
}
panel.repaint();
}
});
panel.add(tile);
}
}
}
};
frame.add(panel, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
< /code>
Это мой основной метод. Если я обновлю этикетки здесь, плата также повторяет себя несколько раз. < /P>
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new reversi();
}
});
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... ms-running
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»