私はコンポジット要素を持っていますが、最初はラベルがあります。今私はそれをラベル(ラベル)で破棄し、同じコンテナ(複合エルメ)に別のラベルを作成しますが、新しいテキストは表示されません。新しいラベル(または作成する可能性のある他のコンポーネント)が古いラベルの代わりにレンダリングされるように、コンポジットに対してどのように再描画を有効にするかを質問します。あなたが見ることができるようにここで は私が持っているコード(コンポジットを再描画のためのユニットテストに分け)SWTコンポジット - 再描画の問題
private Label createLabel(Composite parent) {
Label label = new Label(parent, SWT.NONE);
label.setAlignment(SWT.CENTER);
label.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
return label;
}
private void changeText() {
assert testCell != null : "Please initialize test cell";
testCell.getChildren()[0].dispose();
Label l = createLabel(testCell);
l.setText("New TexT");
testCell.redraw();
}
private void draw() {
Display display = new Display();
shell = new Shell(display);
shell.setLayout(new GridLayout(2,false));
testCell = new Composite(shell,SWT.BORDER);
testCell.setLayout(new GridLayout());
Label l = createLabel(testCell);
l.setText("Old Text");
Composite btnCell = new Composite(shell,SWT.NONE);
btnCell.setLayout(new GridLayout());
Button b = new Button(btnCell, SWT.PUSH);
b.setText("Change");
b.addListener(SWT.MouseDown, new Listener() {
public void handleEvent(Event e) {
changeText();
}
});
で、私は新しい要素を追加した後、複合に再描画呼び出しています。また、disposeの呼び出し後に、testCell.getChildren()。lengthが期待どおりに0を返し、新しいラベルを作成すると、新しい要素が実際に取得されていることを検証する同じ式が1を返すことを確認しました親コンポジットコンテナに追加 ここに何か不足していますか?
changeText()
機能で
() 'は何もしなかった。それは誰かのために役立つことがあります。 :) – mykola
@mykola: 'shell.pack()'は私のウィンドウを小さくして再描画しましたが、 'shell.layout()'はそれを再描画してサイズを保持しました。私は 'shell.open()'の後にコントロールをウィンドウに追加していて、コントロールが表示されませんでした。 'shell.layout()'はそれを解決しました。 – gregn3
layout()でjavadocが指定されていると、 'testCell.requestLayout();' – titou10