4

次のコードを使用して、swing ウィンドウ JFrame コンテナーのパネルを追加および削除しようとしています。JPanel がコンストラクターに追加された場合は追加されますが、runtime は追加されません。

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

class test extends JFrame implements ActionListener {
    test() {
        Container cp = this.getContentPane();
        JButton b1 = new JButton("add");
        JButton b2 = new JButton("remove");
        cp.add(b1);
        cp.add(b2);
        b1.addActionListener(this);
        b2.addActionListener(this);
    }

    public void actionPerformed(ActionEvent ae) {
        if (ae.getActionCommand().equals("add")) {
            panel1 frm = new panel1();
            cp.add(frm);
        }
        if (ae.getActionCommand().equals("remove")) {
            remove(frm);
        }
    }

    public static void main(String args[]) {
        test t1 = new test();
        t1.show(true);
    }
}

class panel1 extends JPanel {
    panel1() {
        JButton b1 = new JButton("ok");
        add(b1);
    }
}
4

2 に答える 2

6
  1. あなたのコンセプトのために(を削除または追加JPanelした後) &をJFrame呼び出す必要がありますvalidate()repaint()JFrame

  2. 使用する方が良いかもしれませんCardLayout

于 2012-12-10T10:42:29.783 に答える
1

私は同様の問題を扱っていました。実行時にパネルに含まれるパネルを変更したかったのですが、
いくつかのテスト、再テスト、および多くの疑似アルゴリズムの失敗の後、これは次のとおりです:

parentPanel:削除したいパネルが含まれていますchildPanel
:必要なパネルparentPanelLayoutを切り替える
には: parentPanel のレイアウト
editParentLayout() : 毎回異なる childPanel と新しい parentPanelLayout を使用して parentPanel を構築します

parentPanel.remove(childPanel); 
editParentLayout();
parentPanel.revalidate();
parentPanel.repaint();
于 2013-10-26T08:00:32.667 に答える