从多个JButtons java swing返回第一次单击Jbutton的结果

时间:2016-01-04 22:08:09

标签: java swing jbutton

基本上我有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();
}

问题是,代码并没有等我单击按钮所以它不会输入任何这些按钮。如果程序等待点击,我该怎么办?如何查看是否点击了按钮?

2 个答案:

答案 0 :(得分:2)

首先查看How to Use Buttons, Check Boxes, and Radio ButtonsHow 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();
            }
        });
    }
}