Java swing,JLabel,html文本在悬停时无法正确呈现

时间:2015-12-22 22:51:20

标签: java swing

我遇到过与JLabel和html的这种奇怪的互动。如果我在jlabel构造函数的字符串中使用html并且我将鼠标悬停在JLabel上,它将使我的整个JPanel陷入困境,将所有内容放在一行上,而不是遵守对组件的任何限制。但是,如果我只使用像“test”这样的简单字符串,则悬停效果可以正常工作。

鼠标进入和退出只是使颜色变亮并在退出时再将其放回。

text = "someString";
JPanel jp = new JPanel();

String str = "<html><div color='red'><u>"+text+"</u></div></html>";
JLabel jl = new JLabel(str);
jl.addMouseListener(this);
jp.add(jl);


@Override
public void mouseEntered(MouseEvent e) {
    JLabel jl = (JLabel) e.getSource();
    currentJlColor = jl.getForeground();
    jl.setForeground(Color.decode("#c0c0c0"));
}

@Override
public void mouseExited(MouseEvent e) {
    JLabel jl = (JLabel) e.getSource();
    jl.setForeground(currentJlColor);
}

1 个答案:

答案 0 :(得分:1)

当您传递HTML格式的文本时,您无法使用标准Java库更改该文本的格式。

一种可能的解决方法是根据需要创建不同格式的字符串,并使用SetText方法更改JLabel

text = "someString";
JPanel jp = new JPanel();

String str1 = "<html><div color='red'><u>"+text+"</u></div></html>"; //color1
String str2 = "<html><div color='#c0c0c0'><u>"+text+"</u></div></html>"; //color2

JLabel jl = new JLabel(str1);
jl.addMouseListener(this);
jp.add(jl);


@Override
public void mouseEntered(MouseEvent e) {
  JLabel jl = (JLabel) e.getSource();
  currentString = jl.getText();
  jl.setText(str2); // this will change the text to color 2
}

@Override
public void mouseExited(MouseEvent e) {
  JLabel jl = (JLabel) e.getSource();
  jl.setText(str1); // Return to original color
}