簡體   English   中英

Swing:如何在每個JPanel中從JTextfield獲得價值?

[英]Swing: how to get value from JTextfield in every JPanel?

我的學校項目是創建一個采購系統,為此我創建一個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();
}

一種解決方案是創建一個擴展JPanel並公開一個公共屬性的類型,該屬性在被調用時將返回存儲在JTextField中的值。 就像是:

public class TextFieldPanel extends JPanel {

    private JTextField myTextField;

    public TextFieldPanel()
    {

        //layout init code here

    }

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

}

然后只需使用此類而不是常規的JPanel。 然后,當單擊按鈕時,遍歷集合中的每個對象,並對它們調用getText()以獲取值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM