2011-10-26 14 views
0

現在、次の問題が発生しています。実行時のコンポーネント位置の更新

実行時にコンポーネントの位置を動的に更新する必要があります。私は外部アプリケーション用のフォームエディタを作っています。標準Swingコンポーネントのラッパークラスを使用しています。現在はJPanelJLabelです。パネルはTableLayoutを使用しています。私は各コンポーネントのフィールドに各コンポーネントの位置を格納しています。何かが変更されたとき、私は再帰的にすべてのポジションを更新する必要があります。ポジションを更新する方法は次のとおりです。

私は知っていますが、それは機能しません。すべてのコンポーネントは0,0グリッドセルに属しているようです。私はデバッガを通して見たように、XとYは正しいです。ここでは、パネルにコンポーネントを追加する方法を示します。

public void addComponent(TableLayouted comp, int x, int y) { 
    c = new TableLayoutConstraints(String.valueOf(x)+","+String.valueOf(y)); 
    add((JComponent) comp, c); 
    //saving position of the component 
    pos.put((Component) comp, comp.getTablePositon()); 
    System.out.println("Component "+comp+"added to x="+x+"y="+y); 
} 

お勧めはありますか?

+0

違いはありますが、将来参照するにはrevalidate()に続けてrepaint()を行う必要があります。順序が重要なことがあります。 – camickr

答えて

2

JComponent.getTopLevelAncestor()。働いていることを意味、完全にすべてのレイアウトを再作成

Component[] comps = getComponents(); 
removeAll(); 
layout = new TableLayout(); 
layout.setColumn(columns); 
layout.setRow(rows); 
setLayout(layout); 

validate()

+0

すみません、どこにこのコードを挿入すればいいですか?私は私のrepaint()の前にそれを挿入しました。 revalidate();そしてそれは何も変更しません。 : – execc

+1

あなたのソースに入ります。より具体的な答えは、[SSCCE](http://sscce.org/)を追加してください。 –

0

は、私は最終的に次のコードでそれを解決しました。皆さん、ありがとうございました!

関連する問題