2

外部クラスからパネルを作成および削除するJFrameがあります。問題は、前後に移動するときに(パネルを数回削除および作成する場合、すべてのパネル、渡される必要のあるすべてのデータへの参照が必要ない)です。 on(frameおよびboolean [まもなく実装される])はコンストラクターに含まれます)コンテンツ全体を下に移動します。

私が使用してGridBagLayoutいるのは、おそらくいくつかの隠れた問題があります。CardLayoutは使いたくないので、お勧めしません。

なぜそうしているのですか、それを止めるにはどうすればよいですか?

コード

deleteContract = new JButton("Usuń kontrakt");
        deleteContract.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {

                ACDeleteContract ACDeleteContract = new ACDeleteContract(frame);
                removeAll();
            add(ACDeleteContract);
            revalidate();
            repaint();
        }
    });
    deleteContract.setPreferredSize(new Dimension(200, 50));
    c.gridy = 2;
    menu.add(deleteContract, c);

    back = new JButton("Powrót");
    back.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
           ACMenu menu = new ACMenu(frame);
           removeAll();
           add(menu);
           revalidate();
           repaint();
       } 
    });
4

1 に答える 1

2

さて、アンドリュー・トンプソンは私を以前は行きたくなかった良い道に導いてくれました。

将来の世代のために、いくつかのヒント:D。

あなたのフレームで行うには

CardLayout cards = new CardLayout();
    JPanel cardPanel = new JPanel();
    cardPanel.setLayout(cards);

    ACReadContract ACReadContract = new ACReadContract(cards, cardPanel);
    //your external JPanel classes with arguments such as above
    ACMenu ACMenu = new ACMenu(cards, cardPanel);

    cardPanel.add(ACMenu, "Menu");
    cardPanel.add(ACReadContract, "ReadContract");
    //naming and adding them for easy moving between them

    //adding this to frame
    add(cardPanel);

外部クラス(コンストラクターの開始、クラスはJPanelを拡張する必要があります)

private JPanel menu, cardPanel1;
private CardLayout cardLayout1;

public ACMenu(CardLayout cardLayout, JPanel cardPanel) {

    cardLayout1=cardLayout;
    cardPanel1 = cardPanel;

外部クラスのアクションリスナー

cardLayout1.next(cardPanel1);

また

cardLayout1.show(cardPanel1, "ReadContract");

同様の問題を抱えている人たちを少し助けてくれたと思います。

于 2012-12-16T11:30:03.163 に答える