代码之家  ›  专栏  ›  技术社区  ›  A. Ab

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

  •  0
  • A. Ab  · 技术社区  · 6 年前

    我正在写的程序有个问题: 我正在创建3个对象类型 JLabel

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

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

    操作系统:windows 10

    代码:

    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 回复  |  直到 6 年前
        1
  •  0
  •   Joop Eggen    6 年前

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

    \u200E (从左到右)和 \u200F (从右到左)看看这是否有什么不同。

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