簡體   English   中英

兩個JPanel之間的通信

[英]Communication between two JPanels

我有這個“主”面板(讓我們稱之為AAA )與BorderLayout,以及兩個面板( BBBCCC ):

public class AAA extends JPanel {
    BBB pnlNorth = new BBB();
    CCC pnlCenter = new CCC();
    public AAA(){
        setLayout(new BorderLayout());
        add(pnlNorth,BorderLayout.NORTH);
        add(pnlCenter,BorderLayout.CENTER);        
    }
}

Panel CCC目前為空,帶有GridLayout。

我的面板BBB看起來像這樣:

public class BBB extends JPanel {
    public BBB (){
        JLabel labNum = new JLabel("Number of items: ");
        JTextField txtNum = new JTextField();
        JButton cmdOK = new JButton("OK");
        txtNum.setColumns(5);
        cmdOK.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                /* ???????????? */
            }
        });
        add(labNum);
        add(txtNum);
        add(cmdOK);        
    }
}

當用戶在txtNum中輸入一個數字並按“OK”時,面板CCC應填充適當數量的行以進行數據輸入。 每行應包含兩個文本字段,兩個下拉列表和一個復選框。 如果用戶輸入一些大數字,那么所有項目都在JScrollPane中會很好。

我的問題 :我應該如何在BBB中實現動作監聽器? 我不知道用戶輸入的是什么號碼。 因此,我不知道CCC的GridLayout中的確切行數(我只知道它應該有5列)。 我可以從BBB中的偵聽器修改其布局嗎? 如何從面板BBB中的監聽器向面板CCC添加組件?

當然,如果你有更好的解決方案(沒有兩個單獨的面板),請告訴我:)

你可能會想到這個錯誤。 或許最好不要考慮兩個正在通信的JPanel ,而是更簡單地說兩個正在通信的對象 ,它們將與任何其他兩個對象進行通信 - 通過影響狀態的方法。 通過讓一個對象調用另一個對象的方法並將其信息發布給另一個對象,可以將該信息從一個對象推送到另一個對象,或者可以通過使用觀察者設計模式將其從一個對象拉到另一個對象。與各種可用的聽眾之一。 我自己,我喜歡使用PropertyChangeListener。 因此,觀察對象將接受一旦其狀態被更改就被通知的偵聽器,然后這些觀察者將調用被觀察者的公共方法來提取已更改的信息。

例如,請查看此答案中的代碼,或者更好地回答這個問題

我設法做到了這一點。 我只是將Center面板作為North面板構造函數中的參數傳遞。 它完美地運作。 謝謝大家的答案:)

暫無
暫無

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

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