HTML в JLabel не отображается правильно

1

Мой JPanel с использованием BorderLayout работал хорошо, пока я не решил добавить JLabel с HTML в его тексте. Я провела несколько часов двойной проверки с людьми, у которых были те же проблемы, но никаких проблем. Когда я комментирую строки, касающиеся этой JLabel, все работает нормально. Вместо этого я попытался использовать JTextArea, но у меня была такая же проблема.

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Gui extends JFrame implements KeyListener {

JFrame jFrame;
JPanel backgroundPanel;
JLabel multiLineTextLabel;
JLabel statusLabel;

int xValue = 1000;

Gui() {
    jFrame = new JFrame("Frame Name");
    jFrame.setSize(1200, 600);
    jFrame.setLayout(new BorderLayout());
    jFrame.setVisible(true);
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    backgroundPanel = new JPanel();
    backgroundPanel.setBackground(Color.BLACK);

    String htmlString = "<html>Word1<br>Word2</html>";
    multiLineTextLabel = new JLabel(htmlString);

    statusLabel = new JLabel("Some Text");

    jFrame.add(backgroundPanel, BorderLayout.CENTER);
    jFrame.add(multiLineTextLabel, BorderLayout.EAST);
    jFrame.add(statusLabel, BorderLayout.SOUTH);
    jFrame.setFocusable(true);
    jFrame.addKeyListener(this);

}

public void keyTyped(KeyEvent e)
{
    //Won't be using
}

public void keyPressed(KeyEvent e)
{
    int keyCode = e.getKeyCode();

    if(keyCode == KeyEvent.VK_LEFT)
    {
        xValue -= 20;
        statusLabel.setText("You are clicking left");
    }
    else if(keyCode == KeyEvent.VK_RIGHT)
    {
        xValue += 20;
        statusLabel.setText("You are clicking right"); //You are "pressing" right
    }
    else if(keyCode == KeyEvent.VK_A)
    {
        statusLabel.setText("You are clicking A"); //You are "pressing" A
    }
    else if(keyCode == KeyEvent.VK_S)
    {
        statusLabel.setText("You are clicking S");
    }
    else if(keyCode == KeyEvent.VK_ESCAPE)
    {
        jFrame.setVisible(false); 
        jFrame.dispose();
    }
    else if(keyCode == KeyEvent.VK_P)
    {
        String positionString = new String("Your position/XValue = " + xValue);

        statusLabel.setText(positionString);
    }

}

public void keyReleased(KeyEvent e)
{
    //Won't be using
}

public static void main(String[] args)
{
    Gui go = new Gui();
}
}
  • 2
    К сожалению, это не работает внутри JLabels.
  • 0
    что делает приватный компонент controlKeyPanel; делать ? Вы добавили в свой макет еще не сделали ни одного объекта, как JPanel или что-то еще? у вас есть этот ярлык multiLineTextLabel, но вы не добавили его в свой макет?
Показать ещё 11 комментариев
Теги:
swing
jlabel

2 ответа

2
Лучший ответ

ваш код работает правильно, но, по моему мнению, вы не знаете разницы между нажатиями и нажатиями кнопок, потому что в вашей функции keyPressed вы сказали: "Вы щелкаете правой кнопкой", что делает сон-сон смысл. Вы должны указать его на то, что вы нажимаете стрелку вправо.

Вам просто нужно нажать кнопку "Вправо", "Влево", "S" или "А", чтобы увидеть, как ваш код делает то, что вы хотите.

Еще один момент, прежде чем вы не добавили multiLineTextLabel в свой JFrame, но когда я сказал вам, все работает так, как вы ожидали

Один момент о JTextArea, вы можете сделать это

 String htmlString = "<html>Word1\n<br>Word2</html>";
 JTextArea jta = new JTextArea(htmlString);
 jFrame.add(jta, BorderLayout.EAST);

поэтому ваш html-код работает так, как вы хотите

0

Решение заключалось в том, чтобы установить рамку, видимую в самом конце. Я случайно установил видимость, а затем добавил все компоненты.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню