试图让RadioButton.isSelected()设置标签的文本.不工作



这是我的代码:

    panel2.add(question1);
    panel2.add(true1);
    panel2.add(false1);
    panel2.add(labelAnswer1);
    panel2.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
    if(true1.isSelected()) {
        labelAnswer1.setText("You are CORRECT!");
    }
    else if(false1.isSelected()) {
        labelAnswer1.setText("You are wrong. The correct answer is " + true1.getText());
    }
    else if(true1.isSelected() && false1.isSelected()) {
        labelAnswer1.setText("You cannot select two answers!");
    }

不太确定我做错了什么。可能太晚了,哈哈。任何帮助都会很感激。谢谢并致以最良好的问候!

Swing,像大多数GUI框架一样是事件驱动的,也就是说,发生了一些事情,然后您对它做出响应。你不知道这些事件何时或以什么顺序发生。

相反,您使用"侦听器"(又名观察者模式)向组件注册兴趣,它告诉您何时发生了某些事情,并根据程序的当前状态采取适当的操作

查看如何使用按钮、复选框和单选按钮以及如何编写动作监听器了解更多细节

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
    public static void main(String[] args) {
        new Test();
    }
    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }
                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
    public class TestPane extends JPanel {
        public TestPane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.anchor = GridBagConstraints.WEST;
            add(new JLabel("Is a banna:"), gbc);
            ButtonGroup bg = new ButtonGroup();
            ActionListener listener = new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    String cmd = e.getActionCommand();
                    System.out.println("You guessed " + cmd);
                    if ("Yellow".equalsIgnoreCase(cmd)) {
                        JOptionPane.showMessageDialog(TestPane.this, cmd + " is the answer");
                    } else {
                        JOptionPane.showMessageDialog(TestPane.this, cmd + " is not the answer");
                    }
                }
            };
            add(createGuess("Red", listener, bg), gbc);
            add(createGuess("Green", listener, bg), gbc);
            add(createGuess("Blue", listener, bg), gbc);
            add(createGuess("Yellow", listener, bg), gbc);
        }
        protected JRadioButton createGuess(String guess, ActionListener listener, ButtonGroup bg) {
            JRadioButton btn = new JRadioButton(guess);
            btn.addActionListener(listener);
            bg.add(btn);
            return btn;
        }
    }
}

你应该添加更多的代码,这样我们就可以看到你的监听器在哪里,其他组件,等等

if语句应该在侦听器中。现在,代码在向页面添加元素后立即执行,而不是在其他时间执行。因此,这段代码只在添加元素之后、用户有时间选择元素之前执行。另外,如果没有选择任何元素怎么办?然后没有if语句被击中,因此您可能需要添加else语句。

这个设置应该是你有两个单选按钮,一个问题,一个按钮,当用户选择他们的答案时点击。该按钮应该有一个运行上述if语句的侦听器。

明白了。

补充道:

true1.addMouseListener(this);

:

@Override
public void mouseClicked(MouseEvent e) {
    if (e.getSource() == true1) {
        labelAnswer1.setText("You are CORRECT!");
    }
}

谢谢你的帮助!

最新更新