Текст не отображается в JTextArea при событии - PullRequest
1 голос
/ 25 ноября 2011

Я не уверен, как исправить эту ошибку, которая у меня есть. Он работает нормально, без ошибок, когда я его использую, но никакой ввод не показывает, когда я нажимаю одну из кнопок. Я использую Eclipse с JDK 1.7.1 и Windows 7. Код в основном создает 3 кнопки с TextArea, который отображает ввод каждой кнопки при нажатии.

public class Main implements ActionListener{

public JTextArea text;
public JButton b1;
public JButton b2;
public JButton b3;
public String choices[] = {"Rock", "Paper", "Scissors"};

public static void main(String[] args){
    Main gui = new Main();
    gui.go();
}

public void go(){
    JFrame frame = new JFrame("Rock Paper Scissors");
    text = new JTextArea(13,20);
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    JButton b1 = new JButton(choices[0]);
    JButton b2 = new JButton(choices[1]);
    JButton b3 = new JButton(choices[2]);
    b1.addActionListener(this);
    b2.addActionListener(this);
    b3.addActionListener(this);
    text.setEditable(false);


    JScrollPane scroller = new JScrollPane(text);
        scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

    panel1.add(scroller);
    panel2.add(b1);
    panel2.add(b2);
    panel2.add(b3);

    frame.getContentPane().add(BorderLayout.CENTER,panel1);
    frame.getContentPane().add(BorderLayout.SOUTH, panel2);
    frame.setSize(350,300);
    frame.setVisible(true);


}

public void actionPerformed(ActionEvent e) {
     if (e.getSource() == b1) {
         text.setText("Your choice was" + choices[0]);
            }
     if (e.getSource() == b2) {
         text.setText("Your choice was" + choices[1]);
            }
     if (e.getSource() == b3) {
         text.setText("Your choice was" + choices[2]);
            }


}
}

Ответы [ 5 ]

3 голосов
/ 25 ноября 2011

Вы никогда не инициализируете переменные экземпляра b1, b2 и b3.Таким образом, оператор equals не будет работать, потому что переменные экземпляра по-прежнему нулевые.Я бы порекомендовал, чтобы в вашем методе go () вы не создавали новые локальные переменные b1, b2 и b3, а вместо этого инициализировали переменные экземпляра.Я изменил твой код:

public void go(){
    JFrame frame = new JFrame("Rock Paper Scissors");
    text = new JTextArea(13,20);
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    b1 = new JButton(choices[0]);
    b2 = new JButton(choices[1]);
    b3 = new JButton(choices[2]);
    b1.addActionListener(this);
    b2.addActionListener(this);
    b3.addActionListener(this);
    text.setEditable(false);


    JScrollPane scroller = new JScrollPane(text);
        scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

    panel1.add(scroller);
    panel2.add(b1);
    panel2.add(b2);
    panel2.add(b3);

    frame.getContentPane().add(BorderLayout.CENTER,panel1);
    frame.getContentPane().add(BorderLayout.SOUTH, panel2);
    frame.setSize(350,300);
    frame.setVisible(true);


}
1 голос
/ 25 ноября 2011

Используя

JButton b1 = new JButton(choices[0]);
JButton b2 = new JButton(choices[1]);
JButton b3 = new JButton(choices[2]);

внутри своей функции, вы определяете эти переменные внутри текущего метода scrope, и, следовательно, ваша программа будет работать так, как задумано, если вы удалите определение до того, как переменные сделают его

b1 = new JButton(choices[0]);
b2 = new JButton(choices[1]);
b3 = new JButton(choices[2]);
1 голос
/ 25 ноября 2011

Это проблема:

JButton b1 = new JButton(choices[0]);
JButton b2 = new JButton(choices[1]);
JButton b3 = new JButton(choices[2]);

Это объявление трех новых локальных переменных, которые скрывают ваши переменные экземпляра, а не присваивают значения существующим переменным.Следовательно, переменные экземпляра остаются равными нулю, и ваши проверки как:

if (e.getSource() == b1)

никогда не оценятся в true.

Просто измените эти строки на:

b1 = new JButton(choices[0]);
b2 = new JButton(choices[1]);
b3 = new JButton(choices[2]);

Я пробовал это (после добавления различных импортов), и это решает проблему.

1 голос
/ 25 ноября 2011

Вы создаете локальные переменные, которые затеняют переменные экземпляра:

JButton b1 = new JButton(choices[0]);
JButton b2 = new JButton(choices[1]);
JButton b3 = new JButton(choices[2]);
0 голосов
/ 25 ноября 2011

Я уверен, что этот код будет работать на 100%, даже если я его не тестировал:

public class Main implements ActionListener{

public JTextArea text;
public JButton b1;
public JButton b2;
public JButton b3;
public String choices[] = {"Rock", "Paper", "Scissors"};

public static void main(String[] args){
    Main gui = new Main();
    gui.go();
}
public void go(){
    JFrame frame = new JFrame("Rock Paper Scissors");
    text = new JTextArea(13,20);
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    b1 = new JButton(choices[0]);
    b2 = new JButton(choices[1]);
    b3 = new JButton(choices[2]);
    b1.addActionListener(this);
    b2.addActionListener(this);
    b3.addActionListener(this);
    text.setEditable(false);


    JScrollPane scroller = new JScrollPane(text);
        scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

    panel1.add(scroller);
    panel2.add(b1);
    panel2.add(b2);
    panel2.add(b3);

    frame.getContentPane().add(BorderLayout.CENTER,panel1);
    frame.getContentPane().add(BorderLayout.SOUTH, panel2);
    frame.setSize(350,300);
    frame.setVisible(true);


}

public void actionPerformed(ActionEvent e) {
     if (e.getSource().equals(b1)) {
         text.setText("Your choice was" + choices[0]);
            }
     if (e.getSource().equals(b2)) {
         text.setText("Your choice was" + choices[1]);
            }
     if (e.getSource().equals(b3)) {
         text.setText("Your choice was" + choices[2]);
            }


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