【发布时间】:2011-08-19 06:30:46
【问题描述】:
我正在使用JComboBox 和自定义ListCellRenderer 制作字体选择器。我想要
JComboBox 显示所有可用的字体,每个字体名称都以自己的字体显示。我目前使用大约 500 种字体。
提供此功能的ListCellRenerer 示例:
private class ComboBoxRenderer extends JLabel implements ListCellRenderer {
private JLabel label = new JLabel("Test");
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
Font tempFont = label.getFont();
setFont(new Font((String) value, tempFont.getStyle(),
tempFont.getSize()));
setText((String) value);
return this;
}
}
问题是,当使用此渲染器时,JComboBox 在程序执行期间变得无响应。第一次单击组合框以显示列表时,加载列表需要几秒钟。第二次单击,列表立即显示。
如果有一条线
setFont(new Font((String) value, tempFont.getStyle(),tempFont.getSize()));
,组合框工作正常。
如何防止这种反应迟钝?
【问题讨论】:
-
您可能想尝试创建
Font对象的缓存。用于缓存 90 年代的Font和FontMetric。您可以为每个Font创建一个JLabel。 -
但有测试
if (isSelected){或cellHasFocus -
刚刚注意到你说它只是第一次很慢并且你使用了 500 种字体。我想加载 500 种字体是一项艰巨的任务。
-
@Tom Hawtin - 不要这么认为,因为评论创建 显示字体 的行有帮助
标签: java swing jcombobox listcellrenderer