有没有办法在JLabel中打印AttributedString?

时间:2013-04-03 03:23:34

标签: java swing jlabel subscript

我有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);
  }
} 

2 个答案:

答案 0 :(得分:0)

通过覆盖JLabel,使其充当JPanelJComponent,并使用其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);
    }

}

希望它有所帮助。