这是我的代码:
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!");
}
}
谢谢你的帮助!