更改JLabel的一部分字体?

时间:2015-08-30 23:35:41

标签: java swing user-interface fonts jlabel

我想将JLabel的前两个单词的改为与JLabel的其他字体不同的字体。我发现我可以创建一个JPanel,并且有两个不同字体的JLabel。我不能用这种方式,因为我只能有一个JLabel(这是因为我有一个鼠标监听器,它根据不同的其他JLabel的入口或出口改变了JLabel的文本,这些JLabel位于单独的JPanel中)。有什么办法吗?我试过这个(将JLabel并排添加到另一个JLabel):

JLabel Giraffesays = new JLabel("Giraffe says:");
        Giraffesays.setFont(new Font("TimesRoman", Font.BOLD, 60)); 
        status.setText(Giraffesays +"Hi!"); //status is a JLabel

但这没有用。我也试过把它变成一个字符串:

String Giraffesays = "Giraffe says:
        Giraffesays.setFont(new Font("TimesRoman", Font.BOLD, 60)); 
        status.setText(Giraffesays +"Hi!"); //status is a JLabel

但是你不能改变字符串的字体......

2 个答案:

答案 0 :(得分:4)

尝试将HTML StringJLabel

一起使用
import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Test {
  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable(){
      @Override public void run() {
        JFrame frm = new JFrame("Text formatting");
        frm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        String giraffesays = "<html><span style=\"font-family:Arial;font-size:13px;\">Giraffe says :</span>Hi there!</html>";
        frm.getContentPane().add(new JLabel(giraffesays));
        frm.pack();
        frm.setLocationByPlatform(true);
        frm.setVisible(true);
      }
    });
  }
}

enter image description here

  

这是错误的行

String giraffesays = "<html><font size="6"><span style=\"font-family:Arial;\">Giraffe says :</font></span></html>";

问题是您需要转义引号size=\"6\"

答案 1 :(得分:3)

两种方法是:

  1. 使用两个单独的JLabels
  2. JComponent支持HTML,因此您只需使用字体标记即可更改文本的外观。 http://docs.oracle.com/javase/tutorial/uiswing/components/html.html