私はこのコードを持っており、validateがコンテナのサブコンポーネントのレイアウトを参照できることを読みました。「コンポーネントの境界の設定やコンテナへのコンポーネントの追加など、レイアウト関連の変更により、コンテナが自動的に無効になります。」(ソース:javadoc)。
ただし、validate()を保持することと、この小さなコードから削除することの間に違いはありません。ポイントを証明するために、2つのケース(検証ありまたはなし)で明確な動作を確認できる説得力のある例を教えてください。その他のコメント/アドバイスをいただければ幸いです。
public class Sw1
extends JApplet
{
JLabel lbl;
public void init()
{
lbl = new JLabel ("a label");
JPanel pan = (JPanel) getContentPane ();
pan.add(lbl);
validate();
}
}
これは、ボタンを押してラベルを追加することを意図した後のプログラムです。ボタンを押すと例外が発生します。
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Sw_test
extends JApplet
implements ActionListener
{
JLabel lbl;
JButton bt ;
JPanel pan ;
JLabel l;
public void init()
{
lbl = new JLabel ("label 1");
bt = new JButton ("go ahead, press me");
bt.addActionListener(this);
JPanel pan = (JPanel) getContentPane ();
pan.setLayout(new FlowLayout());
pan.add(lbl);
pan.add(bt);
validate();
}
public void actionPerformed(ActionEvent ev)
{
l = new JLabel("new label");
pan.add(l);
}
}