1

Netbeans IDE を使用して GUI アプリケーションを作成しています。JPanel を含む JFrame があります。ボタンをクリックした後、最初の中に別の JPanel を表示したいと思います。もう一方の JPanel は別のファイルにあります。どうすればこれを行うことができますか?これが実用的でない場合は、最初の JPanel を 2 番目のものに置き換えてもかまいません。

以下を試してみましたが、うまくいかないようです。私はJavaとGuiのプログラミングが初めてなので、助けていただければ幸いです。

private void jButtonActionPerformed(java.awt.event.ActionEvent evt) {        
    JPanel2 jPanel2 = new JPanel2();
    JPanel1.add(jPanel2);
}
4

4 に答える 4

6

Container#addメソッドの javadoc を参照してください。

このメソッドは、レイアウト関連の情報を変更するため、コンポーネント階層を無効にします。コンテナーが既に表示されている場合は、追加されたコンポーネントを表示するために、その後階層を検証する必要があります。

したがって、パネルを追加するだけでは十分ではありませんが、階層を再度検証する必要があります。

JPanel1.validate();
JPanel1.repaint();

CardLayout@Andrewが彼の回答で提案したように使用することは、パネルを手動で置き換えるよりもおそらくより良い代替手段です

2 つの補足事項:

  • Java の命名規則を学び、尊重します (たとえば、クラスのインスタンスは小文字で始まります)。だからあなたのJPanel1.add呼び出しはjPanel1.add
  • Jxxxほとんどの場合、 Swing クラスを拡張する必要はありません。クラス名JPanel1を見ると、JPanel2まさにそれをやっています。これらのクラスを拡張するよりも、利用可能な API を使用してこれらのクラスをカスタマイズすることをお勧めします。
于 2012-09-19T09:08:14.410 に答える
3

ここに示すように、 CardLayoutを使用します。

ゲームビュー ハイスコ​​アビュー

于 2012-09-19T09:32:20.523 に答える
3

また、変更を有効にするには、次のコードを追加する必要があります。

jPanel1.validate();
jPanel1.repaint();
于 2012-09-19T09:08:23.280 に答える
0
    newPanel obj = new newPanel ();
    setLayout(new BorderLayout());
    add(obj ,BorderLayout.EAST ,1);//3rd argument is index
    repaint();
    revalidate();
于 2016-08-11T07:18:20.913 に答える