2017-12-06 23 views
2

SWTテーブルを作成し、それに列を追加しました。ヘッダー行だけに太字のフォントを適用したい。だから私のコードはなぜ適用されたフォントはswtのfont.dispose()で削除されますか?

上記のコードで
Table table= new Table(top, tableStyle); 
Font font = new Font(null, StringUtils.EMPTY, 9, SWT.BOLD); 
for (int i = 0; i < titles.length; i++) 
{ 
     new TableColumn(table, SWT.NONE); 
     header.setFont(i, font); 
     header.setText(i, titles[i]); 
} 
font.dispose(); 

以下のように見える、私はそれを行うには良い方法であるように配置されています。しかし、これはヘッダーからフォントスタイルを削除しています。最後の行を削除すると、フォントが適用されたままになります。

ここに間違いがありますか?それとも、これは期待される行動ですか?

+3

SWTは、テーブルが表示されている間ずっとフォントを使用する必要があります。テーブルが配置されているときに処分するのは安全です。 –

答えて

5

Fontが必要なくなったときだけ待つ必要があります。テーブルのdisposeイベントに処理を結び付けることができますので、手動で処分する必要はありません。

public static void main(String[] args) 
{ 
    final Display d = new Display(); 
    Shell s = new Shell(d); 
    s.setLayout(new FillLayout()); 

    Table table = new Table(s, SWT.NONE); 
    Font font = new Font(null, "", 12, SWT.BOLD); 
    for (int i = 0; i < 3; i++) 
    { 
     TableItem item = new TableItem(table, SWT.NONE); 
     item.setFont(font); 
     item.setText("" + i); 
    } 

    table.addListener(SWT.Dispose, e -> font.dispose()); 

    s.pack(); 
    s.open(); 

    while (!s.isDisposed()) 
    { 
     if (!d.readAndDispatch()) 
      d.sleep(); 
    } 
    d.dispose(); 
} 
+1

'!font.isDisposed()'チェックは必要ありません。 SWTですでに処分されているフォントに対して 'dispose()'を呼び出すことは合法です。 –

+0

@RüdigerHerrmannフェアポイント、それを削除しました。 – Baz

関連する問題