【发布时间】:2017-10-04 17:58:33
【问题描述】:
我想要一种不同的方式来创建多色 JLabel。 (多色 = 不同前景色的部分文本)
到目前为止,我发现的唯一解决方案(也是我目前使用的)是在 html 中设置文本。但是我遇到了问题......
当 LayoutManager 决定 JLabel 应该缩小,在 JLabel 中使用纯文本时,文本会被裁剪,并添加“...”。 (例如:“My Long Text” -> 变为:“My Long T...”)
在 JLabel 中使用 html 时,文本会包裹在空格字符的某处,而其余部分则留在可绘制区域之外,并且由于 JLabel 的高度不变,因此不可见。 (例如:“My Long Text” -> 变为:“My Long”)
在我的例子中,JLabel 是在 JTable 中呈现的,它可以由用户调整大小,更不用说在不同的屏幕分辨率下。
我尝试在 html 中添加“nowrap”属性或“”标签,但看起来这被忽略了。
留给我 - 我认为 - 一个解决方案:我自己绘制标签。 或不? 有什么建议么? 例子?
谢谢。
这是一个非常简单的例子: 尝试水平调整此面板的大小,看看两个 JLabel 中的文本会发生什么...
(没有提示用户,第二个JLabel的文本不是完整的内容)
-> 在示例中,JLabel 的高度发生了变化,但是当在框架的 JTable 中呈现时,行的高度没有改变,我不希望它改变。如果不使用 HTML,它也不会改变高度...
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class MultiJLabel
extends JFrame
{
public MultiJLabel()
{
super("Multi-colored JLabel test");
JPanel pnl = new JPanel();
pnl.setLayout(new BorderLayout());
pnl.add(new JLabel("This is a test of My Long Text"), BorderLayout.NORTH);
pnl.add(new JLabel("<html>This is a test of <font color='#ffbebe'>My Long Text</font></html>"), BorderLayout.SOUTH);
this.getContentPane().add(pnl);
this.pack();
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args)
{
new MultiJLabel();
}
}
【问题讨论】:
-
你能显示minimal reproducible example。 HTML 无疑是最简单的。在这里,您的问题与多色无关,而是与包装文本有关。首先,如果你的文字太长,你会期待什么?
-
@all 我投票支持重新打开,副本是关于
JLabel在JList内,这与在相同JLabel内具有不同颜色不同。请注意,这里有一个隐藏的问题,“如果 HTML 是一种解决方案,如何使 wrap 正常工作?”。 -
@AxelH 感谢您的快速回复。我用一个最小的例子编辑了我最初的问题(因为最初的问题发生在一个大框架内)。我期望的是某种指示,告诉用户显示的文本不完整。