我遇到过与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);
}
答案 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
}