2013-08-30 17 views
9

私はscene2d.uiウィンドウ(基本的に移動可能なテーブルです)とその内容のサイズを変更しようとしています。これまではウィンドウのサイズ自体は変更できましたが、内容は変更できませんでした。私はこのようにそれをやっている:この場合ウィンドウ/テーブル内の既存の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 

、ウィンドウは、私は窓に沿ってサイズを変更しようとしているテキストフィールドが含まれていますが、唯一のウィンドウは、テキストながら、その新しいサイズで再描画されますフィールドは同じままです。

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

答えて

1

、それはサイズがウィジェットが含まれているテーブルのセル上ではなく、ウィジェット自体に設定されていることは明らかです。 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); 
15

私は同じ問題を抱えていましたが、解決策を得るにはしばらく時間がかかりました。 この要望を見てslider always has default width

解決策は以下のとおりです。

UIウィジェットは、自分のサイズと位置を設定しないでください。代わりに、親ウィジェットは各子のサイズと位置を設定します。ウィジェットは、親がヒントとして使用できる最小、優先、最大サイズを提供します。 Tableのような親ウィジェットの中には、子のサイズや配置方法の制約を与えることができます。ウィジェットのレイアウトに特定のサイズを与えるには、ウィジェットの最小、優先、最大のサイズはそのままにし、サイズの制約は親に設定します。 libGDXのウィキから
Layout at Wiki

。彼らはただそれを追加しました。だからテーブルにそれらのウィジェットを追加するだけで、末尾に.width(newTableWidth)という行を追加すると、それは正しい幅でなければなりません。 BeenXの答えに基づいて

table.add(textField).width(600).height(60); 
+1

ありがとうございました。これは最初にウィジェットのサイズを設定する方法ですが、設定した後に変更しようとしています。私はテーブルのサイズを変更していますが、新しい行を追加するまで、内のすべてが同じサイズを保持します。テーブルに新しいものを追加することなくウィジェットのサイズを「更新」することができるかどうか知っていますか?これまでのところ、これは私にとってscene2dの弱点のようですが、一度設定した後は動的に変更されるようには思われません。 – mattboy

+0

ウィジェット自体ではなく、そのセルのサイズを変更します。その後、テーブルの無効化を使用します。私はそれがちょうどそれがどのように働くか弱いとは思わない – BennX

+0

はい、私はちょうど今も変更がウィジェットではなくセルに行われる必要があることを理解しました。正しい方向に私を指してくれてありがとう。 – mattboy

関連する問題