Использование тегов html в строках иврита, которые определены как текст JLabel, замедляет загрузку программы - PullRequest
0 голосов
/ 07 октября 2018

У меня есть проблема в моей программе, которую я пишу: я создаю 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 Ответ

0 голосов
/ 08 октября 2018

Некоторые недостатки могут быть устранены, например так (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>");
...