gpt4 book ai didi

Java swing、带有 html 文本的 JLabel 在悬停时无法正确呈现

转载 作者:行者123 更新时间:2023-11-30 07:42:47 24 4
gpt4 key购买 nike

我在使用 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);
}

最佳答案

当您传递 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
}

关于Java swing、带有 html 文本的 JLabel 在悬停时无法正确呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34425755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com