1

親(パネル)に関連する子コンポーネントのサイズを変更したい。

私は次の方法を使用しています:

@Override
public Dimension getPreferredSize() {
Dimension d = getParent().getSize();
int w = d.width * wid / 100;
int h = d.height * he / 100;
//System.out.println("x"+w+"h"+h);
return new Dimension(w,h);
}

しかし、それは私の問題を解決しません。コンポーネントのサイズを変更する別の方法があるかどうか誰かにわかりますか?

4

2 に答える 2

3
  • 適切LayoutManagerに使用し、それを供給する理由はありません

  • プログラムでサイズを変更したい場合は、LayoutManagerを拒否して、ComponentListenerまたはHierarchyListenerを実装する必要があります

  • (上記の)変更後は、revalidate()とrepaint()を呼び出す必要があります

  • リスナーからサイズを変更する場合は、Swing Timerでサイズ変更(400〜500ミリ秒)イベントを遅らせます。サイズ変更を続行する場合は、ちらつきやフリーズを回避するためにTimer#restart()を続行します。

于 2012-05-28T11:58:11.603 に答える
0

setPreferredSize(Dimension d)子コンポーネントでを呼び出すことができます。JFrameをパックすると、コンポーネントはそのサイズになろうとします。


編集:コメントが言ったように、避けるsetPreferredSize(Dimension d)のが最善ですが、私はこの方法を使用しました。例:3つのJPanel(カスタムクラス)があるBorderLayoutを持つJPanel。WESTパネルとSOUTHパネル(もう1つはCENTER)は、高さがそれぞれ0.1 *幅または高さである必要がありました(JPanelの場合)。使用しました

setPreferredSize(new Dimension(getPreferredSize().height, getPreferredSize().width * 0.1))

これはうまくいきました。Borderlayoutはその値を取り、Panelを少し広くしました(内側のJPanelのいずれにも他のJComponentがなかったため、これを行う必要がありました)。

于 2012-05-28T11:44:59.910 に答える