Swing:如何在每个JPanel中从JTextfield获取价值?

时间:2014-12-12 15:35:44

标签: java swing jpanel jbutton jtextfield

我的学校项目是为我创建一个购买系统,我创建一个JPanel数组来列出所有产品信息,并允许用户为每个项目输入内容。我不知道如何通过单击一个按钮从jtextfields获取所有值。 actionPerformed()方法总是需要一个最终变量,这对我来说非常麻烦。

private JButton payBtn;

public void shoppingCartTab(Customer userIn){
    contentPanel.removeAll();
    bottomPanel.removeAll();
    final Customer USER = userIn;
    ArrayList<Product> pArray = new ArrayList<Product>();
    pArray = loadCartFile.loadCartFile(userIn);
    JLabel tabLabel  = new JLabel("Shopping Cart");
    JPanel cartItems = new JPanel();
    cartItems.setLayout(new BoxLayout(cartItems, BoxLayout.Y_AXIS));
    final JPanel CONSTANT_CART = cartItems;
    JScrollPane scroller = new JScrollPane(cartItems);  

    if(pArray != null){
        JPanel item[] = new JPanel[pArray.size()];
        for(int i = 0; i< pArray.size(); i++){

            item[i] = new JPanel(); 
            final JPanel JPANEL_TO_DEL = item[i];
            item[i].setLayout(new GridBagLayout());
            GridBagConstraints gBC = new GridBagConstraints();
            gBC.weightx = 0.3;
            item[i].setBorder(BorderFactory.createLineBorder(Color.BLACK));

            JLabel icon_small = new JLabel(new ImageIcon("Icons\\" + pArray.get(i).getID() + "_small.jpg"));
            JLabel itemID = new JLabel(pArray.get(i).getID());  

            final String CONSTANT_ID = pArray.get(i).getID();
            JLabel itemName = new JLabel(pArray.get(i).getName());
            JLabel itemPrice = new JLabel("$" + pArray.get(i).getPrice());
            JPanel setQuantity = new JPanel();
            JButton plusBtn = new JButton("+");plusBtn.setPreferredSize(new Dimension(45,30));
            final JTextField QUANTITY = new JTextField("0");QUANTITY.setColumns(3);

            QUANTITY.setPreferredSize(new Dimension(45,30));QUANTITY.setHorizontalAlignment(JTextField.CENTER);
            JButton minusBtn = new JButton("-");minusBtn.setPreferredSize(new Dimension(45,30));

            plusBtn.addActionListener(new ActionListener(){
                    @Override
                    public void actionPerformed(ActionEvent event){
                        if(Integer.parseInt(QUANTITY.getText())<100)
                            QUANTITY.setText(Integer.toString(Integer.parseInt(QUANTITY.getText())+1));
                    }
                });
            minusBtn.addActionListener(new ActionListener(){
                    @Override
                    public void actionPerformed(ActionEvent event){
                        if(Integer.parseInt(QUANTITY.getText())>0)
                            QUANTITY.setText(Integer.toString(Integer.parseInt(QUANTITY.getText())-1));
                    }
                }); 

            setQuantity.add(plusBtn);
            setQuantity.add(QUANTITY);
            setQuantity.add(minusBtn);
            JButton delBtn = new JButton("Delete");
            delBtn.addActionListener(new ActionListener(){
                    @Override
                    public void actionPerformed(ActionEvent event){
                        int dialogResult = JOptionPane.showConfirmDialog(null, "Are you sure to remove this item from your cart?", "Confirm", JOptionPane.YES_NO_OPTION);
                        if(dialogResult == JOptionPane.YES_OPTION){
                            CONSTANT_CART.remove(JPANEL_TO_DEL);
                            revalidate();
                            repaint();
                            ShoppingCart.removeItem(USER, CONSTANT_ID);
                        }
                    }
                }); 
            gBC.gridx = 0;
            gBC.gridy = 0;
            item[i].add(icon_small,gBC);
            gBC.gridx = 1;
            gBC.gridy = 0;
            item[i].add(itemID,gBC);
            gBC.gridx = 2;
            gBC.gridy = 0;
            item[i].add(itemName,gBC);
            gBC.gridx = 3;
            gBC.gridy = 0;
            item[i].add(itemPrice,gBC);
            gBC.gridx = 4;
            gBC.gridy = 0;
            item[i].add(setQuantity,gBC);
            gBC.gridx = 5;
            gBC.gridy = 0;
            item[i].add(delBtn,gBC);
            cartItems.add(item[i]);
        }

        contentPanel.add(tabLabel); 
        contentPanel.add(scroller);

        payBtn = new JButton("Pay");
        bottomPanel.add(payBtn); payBtn.addActionListener(this);
    }else{
        JLabel emptyMsg = new JLabel("Your cart is empty!");
        contentPanel.add(emptyMsg);
    }

    revalidate();
    repaint();
}

1 个答案:

答案 0 :(得分:0)

一种解决方案是创建一个扩展JPanel的类型,并公开一个公共属性,在调用时返回存储在JTextField中的值。类似的东西:

public class TextFieldPanel extends JPanel {

    private JTextField myTextField;

    public TextFieldPanel()
    {

        //layout init code here

    }

    public String getText()
    {
        return myTextField.getText();       
    }

}

然后只使用此类而不是常规JPanel。然后,当您单击按钮时,迭代集合中的每个对象,并对它们调用getText()以获取您的值。