gpt4 book ai didi

java - 如何在字体更改时强制 JTree 中的 HTML JLabel 调整大小

转载 作者:行者123 更新时间:2023-11-30 05:13:38 26 4
gpt4 key购买 nike

我正在更新 Java Swing 应用程序,以支持用户将应用程序的字体从正常大小切换为更大的大小(以便用户可以在运行时在两种大小之间切换)。我遇到的一个问题是 JTree 使用 HTML 作为树节点来为某些节点中的文本添加下划线(HTML 仅嵌入在每个树节点的 JLabel 中)。关于节点需要了解的另一件事是它们是自定义组件,在每个 JLabel 前面添加一个 JCheckBox。

问题是,一旦 JTree 可见,增加字体大小会导致节点(包含下划线文本)无法调整大小。这些节点的 HTML 似乎阻止节点变宽,因此当字体更改时,文本会被截断。

我认为我的选择是:1)使用另一种方法给文本添加下划线,因为从 JLabel 中删除 HTML 会导致它在字体大小更改时正确调整大小,或者 2)保留 HTML 格式并以某种方式强制JTree/JLabels 在字体大小更新时调整大小(可能通过触发属性更改事件?)。

当字体大小更新时,代码已经在父 JFrame 上调用 SwingUtilities.updateComponentTreeUI()。

编辑:用于更改应用程序中字体的方法是 explained here .

任何帮助将不胜感激。提前致谢!

-迈克

最佳答案

我无法重现您所描述的问题。这是一个在 JavaSE 6 上适合我的测试程序:

public class JTreeFontResize {
private static JTree tree;
private static JFrame frame;

public static void main(String[] args) throws InterruptedException,
InvocationTargetException {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
tree = new JTree(new Object[] { "One (plain)",
"<html><u>Two (HTML)", "<html>Three (HTML)" });
frame = new JFrame("Tree Font Resize");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 300, 300);
frame.add(tree);
frame.setVisible(true);
}
});

Thread.sleep(2000);
changeFontSize(20);

Thread.sleep(2000);
changeFontSize(30);

Thread.sleep(2000);
changeFontSize(12);
}

private static void changeFontSize(final int size) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Font font = new Font("Vernanda", Font.PLAIN, size);
FontUIResource fontResource = new FontUIResource(font);
Enumeration<Object> keys = UIManager.getDefaults().keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
Object value = UIManager.get(key);
if (value instanceof FontUIResource) {
UIManager.put(key, fontResource);
}
}
SwingUtilities.updateComponentTreeUI(frame);
}
});
}
}

如果上述内容适合您,那么也许您应该发布有问题的代码的精简版本。

关于java - 如何在字体更改时强制 JTree 中的 HTML JLabel 调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2430277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com