2

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

2 回答 2

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

}

希望能帮助到你。

于 2013-04-03T03:54:44.930 回答
0

通过覆盖JLabelso 它的行为就像JPanelorJComponent并使用它的paint方法。那显然不是一个好主意,JPanel直​​接用a就好了。Graphics2D上下文知道如何处理一个(AttributedString字符迭代器,具体来说)。

JLabel直接了解 HTML 渲染,也许这可以帮助您完成特定任务,因为您可以轻松构建带有上标标签的 HTML 字符串。我不知道将 a 转换AttributedString为 HTML 的舒适方法。

于 2013-04-03T03:41:32.493 回答