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

时间:2013-05-02 13:38:06

标签: java swing awt jtextfield jcombobox

我正在学习java并坚持使用JComboBox。 我有一种感觉,我正在尝试的东西,并通过墙4小时通过。

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

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

我希望得到用户选择的值,然后取10美元的值并将其乘以2。

$ 20的结果将显示在JTextField上。

请帮助:(

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);
    } 
}

3 个答案:

答案 0 :(得分:3)

我猜您正在寻找一种将String转换为Integer的方法。这可以通过Integer.valueOf完成。

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

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);
            }
        });
    }
}

答案 1 :(得分:3)

只需进行一些更改:

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);
    } 
}

答案 2 :(得分:1)

您需要设定固定价格和JTextField final,以便将其传递给您的事件处理程序。

此外,为什么使用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));
        }
    }            
);