在定义为 JLabel 文本的希伯来语字符串中使用 html 标记 使程序加载速度变慢



我正在编写的程序有一个问题: 我正在创建 3 个对象类型的JLabel,并且我使用希伯来语字符串。我将每个字符串与一个开始 HTML 标记和一个结束 HTML 标记连接起来,以启用多行文本。

问题是,当我使用 HTML 标签,将 HTML 标签连接到字符串并将它们设置为 JLabels 文本时,从运行程序到窗口出现大约需要 6 秒。当我不使用HTML标签时,窗口会在运行程序后的一到两秒内显示。

为什么会这样?如何将带有字符串的 HTML 标记用作 JLabel 文本,而不会从启动程序到程序窗口出现这么大的延迟?

操作系统: 视窗 10
编译器: Intellij IDEA

代码:

import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
public class GuideUseWin extends JFrame {
private JPanel mainPanel;
private BoxLayout mainLayout;
private JLabel firstImgLbl;
private JLabel secondImgLbl;
private JLabel thierdImgLbl;

public GuideUseWin() {
this.setSize(400, 700);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.mainPanel = new JPanel();
this.mainLayout = new BoxLayout(this.mainPanel, BoxLayout.PAGE_AXIS);
this.mainPanel.setLayout(this.mainLayout);
this.add(this.mainPanel);
this.firstImgLbl = new JLabel();
ArrayList <JLabel> photosLblsArr = new ArrayList<JLabel>();
photosLblsArr.add(this.firstImgLbl);
photosLblsArr.add(this.secondImgLbl);
photosLblsArr.add(this.thierdImgLbl);
String[] stepsArr = {"מדריך שימוש בסיסי בתוכנה ",
"תחילה יש לבחור X מתוך 3 השורות המוצגות בחלון  התוכנית, על ידי לחיצה על אחד המקשים 1,2 או 3 במקלדת הנומרית",
"לאחר מכן, יש לבחור מספר  על ידי לחיצה על אחד המקשים 0-9 "};
for (int i = 0; i < 3; i++) {
JLabel stepLbl = new JLabel("<html>" + stepsArr[i] + "</html>");
stepLbl.setForeground(Color.black);
stepLbl.setFont(new Font("Serif", Font.BOLD, 20));
stepLbl.setBackground(Color.cyan);
stepLbl.setBounds(100, 100, 100, 100);
stepLbl.setMinimumSize(new Dimension(100, 100));
this.mainPanel.add(stepLbl);
}
this.setVisible(true);
}
}

我检查并发现当我仅使用英语字符串时,窗口在运行程序后 1-3 秒后正确显示。为什么会这样?我怎样才能使用带有字符串的 HTML 标签作为 JLabel 文本,而不会从启动程序到程序窗口出现这么大的延迟?

可以消除一些低效率的地方,比如这样(JLabel,字体创建(:

StringBuilder sb = new StringBuilder("<html>");
for (String step : stepsArr) {
sb.append(step).append("<br>");
}
JLabel stepLbl = new JLabel(sb.toString());
stepLbl.setForeground(Color.black);
stepLbl.setFont(new Font("Serif", Font.BOLD, 20));
stepLbl.setBackground(Color.cyan);
stepLbl.setBounds(100, 100, 100, 300);
stepLbl.setMinimumSize(new Dimension(100, 300));
mainPanel.add(stepLbl);

字体,希伯来语和HTML渲染似乎是主要问题,但我没有实际经验。您可以尝试添加u200E(从左到右(和u200F(从右到左(,看看这是否有一些不同。

使用 HTML 字体可能会变得更加棘手。检查是否呈现了相同的字体,而不是其他字体。

StringBuilder sb = new StringBuilder("<html>");
sb.append("<span style='font-family: Serif'>");
for (String step : stepsArr) {
sb.append(step).append("<br>");
}
sb.append("</span>");

最新更新