如何在 Swing 中使用 HTML

How to use HTML in Swing

我有一个不寻常的问题: 我有一个秋千标签,在 Hangman 游戏中更新 "Used letters"。我这样声明:

used = new JLabel(" Used: ");

但是我在代码中的另一个区域添加了它。这里:

used.setText(used.getText() + lUsed  + " , ");

现在,当用户输入字母时,它会更新标签并添加字母,但如果输入足够多,它们会将框架的其余内容推到视图之外。该标签将我的边界布局的西侧扩展得如此之多,以至于其他所有内容都被推送,然后有时会切断应用程序 window.

有什么好的方法可以使用 HTML 来使文本自动换行并且不改变面板(它包含的内容)的大小?

    GridLayout c = new GridLayout(rows,0);
    westPanel = new JPanel(c);
    westPanel.add(guessedPanel);
    westPanel.add(usedPanel);
    frame.getContentPane().add(westPanel, BorderLayout.WEST);

布局如何^^

对于那些来自 Google、 的人来说更通用的解决方案,您可以很容易地将 HTML 添加到 Swing 组件,只要内容是添加开始和 以正确的 HTML 标签结尾。

例如,您可以将 HTML 文本插入 JLabel,这样:

label.setText("<html> Text </html>");

您可以将其颜色居中并在第一个字母下划线,如下所示:

label.setText("<html><center><u>T</u>ext</center></html>");

这里 good tutorial 介绍了如何在 Swing 组件中使用 HTML。

--

对于您的特定解决方案,您可以在向标签添加文本时简单地使用HTML。而不是使用 used.getText() 您应该将文本存储在某处的字符串中(不包含开始和结束 HTML 标记),并更新该字符串,以便能够有效地管理开始和结束关闭 HTML 个标签。所以它可以像这样

String text; // Earlier in the code
...
text += ("<br> " + lUsed);
used.setText("<html>" + text + "</html>")

除其他事项外,您可以尝试设置标签的首选大小或最大大小,以防止标签变大。此外,您可以将标签改为某种文本面板或文本区域,这将自动支持自动换行、滚动和您可能需要的其他功能。

这是 how to use JTextAreas 上的指南。

为 HTML 的 body 标签指定样式宽度。有关示例,请参阅 Text Wrap in JOptionPane