В настоящее время я пытаюсь запрограммировать графический интерфейс для игры в реверси (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
Обновление Jlabel во время работы программы ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1738006800
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();
}
});
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79391982/updating-a-jlabel-while-the-programs-running[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия