我有AttributedString
常规文字和一些下标。我想将文本放在JLabel
中,而不会丢失格式。
这可能吗?如果没有,最好的替代方案是什么?
编辑:以下是一些示例代码,可以进一步解释我的问题:
import javax.swing.JLabel;
import javax.swing.JFrame;
import java.text.AttributedString;
import java.awt.font.TextAttribute;
public class LabelExample extends JFrame implements Runnable
{
private JLabel label;
private AttributedString as;
public LabelExample()
{
as = new AttributedString("Ten to the fifth is 105");
as.addAttribute(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUPER, 22, 23);
label = new JLabel(as);
//the above line doesn't accept AttributedString
//as a suitable constructor
this.add(label);
}
public void run()
{
setSize(500, 500);
setVisible(true);
}
public static void main(String[] args)
{
LabelExample e = new LabelExample();
javax.swing.SwingUtilities.invokeLater(e);
}
}
答案 0 :(得分:0)
通过覆盖JLabel
,使其充当JPanel
或JComponent
,并使用其paint
方法。这显然不是一个好主意,只需直接使用JPanel
即可。 Graphics2D
上下文知道如何处理AttributedString
(字符迭代器,具体)。
JLabel
直接了解HTML呈现,这可能会帮助您完成特定任务,因为您可以轻松地使用上标标记构建HTML字符串。我不知道将AttributedString
转换为HTML的简便方法。
答案 1 :(得分:0)
使用我的AttributedLabel类。
public class AttributedLabel extends JLabel {
AttributedString str;
public AttributedLabel(AttributedString s){
super(s);
str = s;
}
@Override
public void paintComponent(Graphics g){
// Render the string
g.drawString(as.getIterator(), 0, 0);
}
}
希望它有所帮助。