基本上我有n个JButton。如果单击其中任何一个,则返回一定数量。 我有一个菜单与每个按钮,当用户点击一个,我的菜单方法返回Button处理程序返回的数字。有可能吗?
类似的东西:
frame.add(button1..)
frame.add(button2..)
frame.add(button3..)
if (button1.isClicked()) {
return button1ActionHandler();
} else if (button2.isClicked()) {
return button2ActionHandler();
} else if (button3.isClicked()) {
return button3ActionHandler();
}
问题是,代码并没有等我单击按钮所以它不会输入任何这些按钮。如果程序等待点击,我该怎么办?如何查看是否点击了按钮?
答案 0 :(得分:2)
首先查看How to Use Buttons, Check Boxes, and Radio Buttons和How to Write an Action Listeners。
请记住,GUI是一个事件驱动的环境,即某些东西,然后你会对它做出回应。
您需要针对每个按钮注册ActionListener
,当按钮被触发时,您需要采取适当的措施。
您可以通过多种方式实现此目的,您可以使用适当的信息设置按钮的actionCommand
,以便确定单击按钮时应执行的操作。您可以使用source
的{{1}}属性来确定事件的来源并采取适当的措施,例如
答案 1 :(得分:2)
听起来你想向用户展示几个选项,让他选择其中一个选项,然后让他按下"提交"按钮将该选项提交给该程序。如果是这样,那么我认为最好的办法是使用JRadioButtons,所有这些都添加到ButtonGroup中 - 这样只允许在任何时候选择其中一个单选按钮,或者使用JComboBox。无论哪种方式,都很容易提取有关用户选择的信息。如果您使用第一个选项,请使用JRadioButtons,ButtonGroup和"提交"按钮,您只需通过调用其getSelection()
方法从ButtonGroup获取选定的ButtonModel,然后通过调用getActionCommand()
从该模型中提取actionCommand String。如果您决定使用第二个选项,请使用JComboBox和"提交"按钮,然后只需在提交按钮的ActionListener中的JComboBox上调用getSelectedItem()
。
下面我向您展示两种选择。请注意,我的提交按钮不使用ActionListener,而是使用AbstractAction,它类似于类固醇上的ActionListener。
import java.awt.event.ActionEvent;
import javax.swing.*;
public class SelectionEg extends JPanel {
private static final String[] SELECTIONS = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
private ButtonGroup buttonGroup = new ButtonGroup();
private JComboBox<String> selectionComboBox = new JComboBox<>(SELECTIONS);
public SelectionEg() {
for (String selection : SELECTIONS) {
JRadioButton radioButton = new JRadioButton(selection);
radioButton.setActionCommand(selection);
add(radioButton);
buttonGroup.add(radioButton);
}
add(selectionComboBox);
add(new JButton(new SubmitAction("Submit")));
}
private class SubmitAction extends AbstractAction {
public SubmitAction(String name) {
super(name);
putValue(MNEMONIC_KEY, (int) name.charAt(0));
}
@Override
public void actionPerformed(ActionEvent e) {
ButtonModel model = buttonGroup.getSelection();
if (model == null) {
// nothing selected yet, ignore this
return;
}
String message = "The selected radio button is: " + model.getActionCommand();
System.out.println(message);
message = "The selection from the combo box is: " + selectionComboBox.getSelectedItem();
System.out.println(message);
}
}
private static void createAndShowGui() {
JFrame frame = new JFrame("Selelection Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new SelectionEg());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}