Java JComboBox、ActionListener,我如何真正使用它们?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16339524/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-16 06:23:34  来源:igfitidea点击:

JComboBox, ActionListener, How do I really use them?

javaswingawtjtextfieldjcombobox

提问by John

Im currently learning java and stuck onto JComboBox. I have a feel things that I am trying out and hitting the wall for the pass 4 hours.

我目前正在学习 Java 并坚持使用 JComboBox。我有一种感觉,我正在尝试并在 4 小时内撞墙。

I am trying to let a user select 1-10 from a ComboBox. How do I get the value of the combobox? The value of the combo box is equivalent to quantity.

我试图让用户从 ComboBox 中选择 1-10。如何获取组合框的值?组合框的值相当于数量。

So I have another value which is maybe $10. If the user choose quantity 2.

所以我还有另一个价值,可能是 10 美元。如果用户选择数量 2。

I want to get the value of what the user choose, then take the value of $10 and times it by 2.

我想获得用户选择的价值,然后取 10 美元的价值乘以 2。

The result which is $20 will be displayed on the JTextField.

20 美元的结果将显示在 JTextField 上。

Please help :(

请帮忙 :(

public class Panel extends JPanel {

    public Panel(){
        JPanel test = new JPanel(new GridBagLayout());

        String[] quantities1 = {"0","1","2","3","4","5","6","7","8","9","10"};
        JComboBox quantitiesCB = new JComboBox(quantities1);
        quantitiesCB.addActionListener(
                new ActionListener(){
                    public void actionPerformed(ActionEvent e){
                        JComboBox combo = (JComboBox)e.getSource();
                        String currentQuantity = (String)combo.getSelectedItem();
                    }
                }            
        );

        JTextField result = new JTextField();

        setLayout(new GridBagLayout());
        setPreferredSize(new Dimension(640,480));
        GridBagConstraints gbc = new GridBagConstraints();

        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 0.1;
        gbc.weighty = 0.1;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.NORTH;
        add(quantitiesCB, gbc);
    } 
}

采纳答案by SeniorJD

Just few changes:

只是一些变化:

public class Panel extends JPanel {

    public Panel(){
        JPanel test = new JPanel(new GridBagLayout());
        String value = "10";
        final JTextField result = new JTextField();

        String[] quantities1 = {"0","1","2","3","4","5","6","7","8","9","10"};
        JComboBox quantitiesCB = new JComboBox(quantities1);
        quantitiesCB.addActionListener(
                new ActionListener(){
                    public void actionPerformed(ActionEvent e){
                        JComboBox combo = (JComboBox)e.getSource();
                        String currentQuantity = (String)combo.getSelectedItem();
                        int value1 = Integer.valueOf(value);
                        int value2 = Integer.valueOf(currentQuantity);

                        String resultText = String.valueOf(value1*value2);
                        result.setText("$" + resultText);
                    }
                }            
        );

        setLayout(new GridBagLayout());
        setPreferredSize(new Dimension(640,480));
        GridBagConstraints gbc = new GridBagConstraints();

        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 0.1;
        gbc.weighty = 0.1;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.NORTH;
        add(quantitiesCB, gbc);
    } 
}

回答by Guillaume Polet

I am guessing that you are looking for a way to convert a Stringto an Integer. That can be done with Integer.valueOf.

我猜您正在寻找一种将 a 转换StringInteger. 这可以通过Integer.valueOf.

Below is a very small/basic demo code that works (but I don't know exactly what you are looking for):

下面是一个非常小的/基本的演示代码(但我不知道你在找什么):

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Panel extends JPanel {

    private JTextField result;
    private JTextField amount;

    public Panel() {
        setLayout(new GridBagLayout());
        String[] quantities1 = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
        JLabel dollar = new JLabel("$");
        amount = new JTextField(3);
        JComboBox quantitiesCB = new JComboBox(quantities1);
        quantitiesCB.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JComboBox combo = (JComboBox) e.getSource();
                String currentQuantity = (String) combo.getSelectedItem();
                int a;
                int q;
                try {
                    a = Integer.valueOf(amount.getText());
                    q = Integer.valueOf(currentQuantity);
                    result.setText("$" + String.valueOf(a * q));
                } catch (NumberFormatException e1) {
                    e1.printStackTrace();
                    // Some invalid number
                }
            }
        });
        JLabel equal = new JLabel("=");
        result = new JTextField(5);
        JLabel quantity = new JLabel("Quantity:");
        GridBagConstraints gbc = new GridBagConstraints();
        add(dollar, gbc);
        add(amount, gbc);
        add(quantity, gbc);
        add(quantitiesCB, gbc);
        add(equal, gbc);
        add(result, gbc);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new Panel());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}

回答by Vincent van der Weele

You need to make the fixed price and the JTextFieldfinal, in order to pass them to your event handler.

您需要设置固定价格和JTextFieldfinal, 以便将它们传递给您的事件处理程序。

Besides, why do you use Stringfor integers? You can just use:

此外,你为什么使用String整数?你可以只使用:

final int FixedPrice = 10;
final JTextField result = new JTextField();
int[] quantities1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
JComboBox quantitiesCB = new JComboBox(quantities1);
quantitiesCB.addActionListener(
    new ActionListener(){
        public void actionPerformed(ActionEvent e){
            JComboBox combo = (JComboBox)e.getSource();
            int currentQuantity = (Integer)combo.getSelectedItem();
            result.setText("$" + String.valueOf(currentQuantity * FixedPrice));
        }
    }            
);