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

Why applied Font is removed upon font.dispose() in swt?

我创建了一个 SWT Table 并向其中添加了列。我想单独将粗体应用于 header 行。所以我的代码如下所示

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

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

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

您需要等待,只有在您不再需要时才 dispose() Font。您可以将处理绑定到 table 的处理事件,这样您就不必手动处理它:

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