有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用希伯来语字符串中的html标记(定义为JLabel文本)会降低程序加载速度

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

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

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

操作系统:windows 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文本,而不必从启动程序到出现“程序”窗口有这么大的延迟


共 (1) 个答案

  1. # 1 楼答案

    可以消除一些低效的问题,例如(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>");