为什么应用Font在swt中的font.dispose()中被删除?

时间:2017-12-06 11:56:14

标签: java swt eclipse-rcp

我创建了一个SWT表并添加了列。我想单独将粗体字应用于标题行。所以我的代码如下所示

 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();

在上面的代码中,我已经处理了,因为这是一个很好的做法。但这是从标题中删除字体样式。如果我删除最后一行,则仍然会应用字体。

这里有错吗?或者这是预期的行为?

1 个答案:

答案 0 :(得分:5)

当您不再需要dispose()时,您需要等待Font 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(); } 。您可以将处置绑定到表的dispose事件,这样您就不必手动处理它:

{{1}}