1

一部のコンポーネントを JPanel に動的に追加しようとしていますが、残念ながら表示されません。コンストラクターに追加されたものだけが表示されます。

更新されたバージョン (すべてのコンポーネントが配置される新しい JPanel を追加):

public class View extends JPanel {

JPanel panel = new JPanel();
JLabel label;
JLabel labels[];
JButton b1 = new JButton("OK");

public View() {
   this.setLayout(new FlowLayout());
   this.add(panel); // adding a new JPanel
   label = new JLabel("My label");
   panel.add(label);  // adding label to the new panel (this one works)
}


public void showLabels() {
  System.out.println("function showLabels called");

  labels = new JLabel[5];

  for (int i = 0; i < 5; i++) {
      labels[i] = new JLabel("Label: " + i);
      panel.add(labels[i]); // this one doesn't work
  }
  panel.add(b1); // this one doesn't work, too
    this.validate(); // validating this class (parent container)
    panel.validate(); // validating the panel, where all the components are
  }
}

残念ながら何も変わりませんでした。

4

1 に答える 1

6

Nested Layout Examplevalidate()に示すように、親コンテナーを呼び出します。左下のラベルは動的に追加されます。呼び出しは GUI のサイズを変更する可能性がありますが、呼び出しは変更しないことに注意してください。GUI のサイズを変更する必要がある場合は を呼び出し、それ以外の場合は を呼び出します。pack()validate()pack()validate()

于 2012-04-10T17:55:55.757 に答える