10

Scene2d.ui ウィンドウ (基本的に移動可能なテーブル) とその内容のサイズを変更しようとしています。これまでのところ、ウィンドウ サイズ自体は正常に変更できますが、その内容は変更できません。私はこのようにやっています:

window.setWidth(newTableWidth);
textField.setWidth(newFieldWidth);
window.invalidate(); <--- New size of window is drawn properly when invalidate() is called
textField.invalidate(); <--- New textField size is NOT drawn, however

この場合、ウィンドウにはテキスト フィールドが含まれており、ウィンドウと共にサイズを変更しようとしていますが、ウィンドウだけが新しいサイズで再描画され、テキスト フィールドは同じままです。

ウィンドウ内のウィジェットを正しく更新するにはどうすればよいですか?

4

2 に答える 2

16

私は同じ問題を抱えていて、解決策を得るのに時間がかかりました。このクォーションスライダーを見てください。デフォルトの幅は常にあります

解決策は次のとおりです。

UI ウィジェットは、独自のサイズと位置を設定しません。代わりに、親ウィジェットが各子のサイズと位置を設定します。ウィジェットは、親がヒントとして使用できる最小サイズ、優先サイズ、および最大サイズを提供します。テーブルなどの一部の親ウィジェットには、子のサイズと配置方法に関する制約を与えることができます。ウィジェットにレイアウト内の特定のサイズを指定するには、ウィジェットの最小サイズ、優先サイズ、および最大サイズをそのままにして、サイズの制約を親に設定します。
Wikiでのレイアウト

libGDX の wiki から。彼らはそれを追加しただけです。したがって、これらのウィジェットをテーブルに追加するときに、行.width(newTableWidth)を最後に追加するだけで、適切な幅になるはずです。

table.add(textField).width(600).height(60);
于 2013-08-31T07:01:03.450 に答える
2

BeenX の回答に基づいて、ウィジェット自体ではなく、ウィジェットを含むテーブルのセルにサイズが設定されていることは明らかです。このtable.add()メソッドはセルを返すため、実行時table.add(textField).width(600).height(60)に幅と高さがこのセルに適用されます。

したがって、既存のセルを更新する私の解決策は、更新したいセルを見つけて、それにtable.getCells()新しい幅を適用することでした。次の例では、リストの最後のセルの幅を変更しています。

List<Cell> cells = window.getCells(); 
Cell cell = cells.get(cells.size()-1);
cell.width(newWidth);
于 2013-08-31T16:02:30.130 に答える