Integer не работает с оператором if - PullRequest
0 голосов
/ 27 апреля 2018

Я делаю текстовую игру и экспериментирую с различными способами создания сюжетной линии прогресса в игре. (Извините, если следовать этому полусложно, я новичок в этом веб-сайте и все еще довольно новичок в Java, я делаю это для проекта класса)

Один из способов, который я пытаюсь сделать, - это увеличить значение (в данном случае LevelNum) на единицу, и всякий раз, когда отображается число, отличное от нуля, оно устанавливает для текста jLabel1 значение, равное этому тексту.

Я пытаюсь сделать это с помощью оператора if, как показано здесь:

if(LevelNum == 0) {
                jLabel1.setText(StoryData.LevelOne);
            }

Увеличение LevelNum делается так:

public void actionPerformed(ActionEvent e) {
                    LevelNum += 1;
                    System.out.println(LevelNum);

            }

(System.out просто проверял, увеличивается ли число)

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

Весь код можно найти здесь: https://pastebin.com/JSX6urFT

StoryData - это отдельный класс в моем текстовом документе, и отдельные строки выглядят так: static String LevelOne = "Level one test";

Вот весь код, связанный с LevelNum:

public class DemoGUI extends javax.swing.JFrame {

private static int LevelNumBackUp = 0;
private static int LevelNum = 0;
public JTextArea jLabel1;
public JTextField jText1;
public JButton jButton1;
public JButton jButton2;
public JButton jButton3;
public JButton jButton4;
public JButton jButtonStart;
public JTextArea jTextAreaStart;
public JButton jButtonCredits;
public JButton jButtonReturn;

public static void main(String[] args) {
    int LevelNum = 0;
    int LevelNumBackUp = 0;

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Глядя на полный код, часть, которая увеличивает LevelNum, находится в следующем блоке:

jButton3.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                    LevelNum += 1;
                    System.out.println(LevelNum);

                }
            });

Тогда внизу у вас есть этот код:

if(LevelNum == 1) {
                jLabel1.setText(StoryData.LevelOne);
            }

Давайте пройдемся по коду, как компьютер. Когда мы добираемся до этого первого блока, мы добавляем новый ActionListener. Однако мы не выполняем метод actionPerformed сразу, поэтому LevelNum остается тем же, что и раньше. Позже мы перейдем к оператору if, но LevelNum не был увеличен.

Когда запускается ActionListener и выполняется метод actionPerformed, он увеличивает LevelNum, а затем печатает новый LevelNum, но он НЕ меняет jLabel1, потому что нет кода, сообщающего ему об этом.

Похоже, вам нужно обновить jLabel1 внутри метода actionPerformed.

0 голосов
/ 27 апреля 2018

Сохранить уровень изменения кода в действии. Попробуйте это:

public void actionPerformed(ActionEvent e) {
                    LevelNum += 1;
                    System.out.println(LevelNum);
                    // Introduction
                    if (LevelNum == 1) {
                        jLabel1.setText("level1");
                    }
                    if (LevelNum == 2) {
                        jLabel1.setText("level2");
                    }
                    if (LevelNum == 3) {
                        jLabel1.setText("level3");
                    }

                }
0 голосов
/ 27 апреля 2018

После того, как значение метки изменилось, попробуйте позвонить revalidate() и repaint(), чтобы обновить свой интерфейс пользователя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...