【问题标题】:Change font of a part of a JLabel?更改 JLabel 一部分的字体?
【发布时间】:2015-08-30 23:35:40
【问题描述】:

我想仅将 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

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

【问题讨论】:

  • 我会使用并排添加的两个 JLabel 以获得最简单的解决方案。你说:" I cannot use this way, because I can only have one JLabel (This is since I have a mouse listener which changes the text of that JLabel based on entrance or exit of different other JLabels, which are in a seperate JPanel)"——这似乎是一个错误的理由。你能解释一下为什么这会阻止你这样做吗?
  • 如果您需要多种文本格式,可能您可以选择html string 用于JLabel,或JTextPane
  • @HovercraftFullOfEels 我必须在每个鼠标侦听器的主面板中更改每个 JFrame 的两个字符串,我有很多。此外,由于我的 JLabel 在整个代码中使用了无数次,因此更改它也意味着更改我的整个代码。我不想这样做,而是希望能够在其中设置具有不同字体的文本。谢谢
  • 几个简单的setter方法可以轻松解决这个问题。除非您希望将显示类型更改为 JTextPane 或按照@Arvind 明智的建议使用 HTML。

标签: java swing user-interface fonts jlabel


【解决方案1】:

尝试将HTML String 与JLabel 一起使用:

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

这是有错误的那一行

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

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

【讨论】:

  • 在尝试以 HTML 方式完成之后,我尝试了这个:-> String giraffesays = "长颈鹿说:" ; 我的字体大小为 6 时出现错误,我不知道为什么。我对在 java 中使用 HTML 非常陌生,所以我想知道您是否可以帮助我?: -> 赋值的左侧必须是一个变量 -> 我理解这一点,但应该自从我声明它 后,即使 left 不是变量,它也不行吗?谢谢
  • String giraffesays = "Giraffe 说:"; NEXT LINE status.setText(giraffesays +"Hi there!");
  • @Rich,文字Hi there!需要用&lt;html&gt;&lt;/html&gt;包裹,同样使用style属性而不是font标签。
  • 我为什么需要这样做?文字“你好!”与其他html文本无关..?此外,在这样做之后存在相同的错误。我认为这是我的字体大小的问题...?
  • 这是出错的那一行 String giraffesays = "长颈鹿说:";
【解决方案2】:

两种方法是:

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

【讨论】:

  • 在尝试以 HTML 方式完成之后,我尝试了这个:-> String giraffesays = "长颈鹿说:" ; 我的字体大小为 6 时出现错误,我不知道为什么。我对在 java 中使用 HTML 非常陌生,所以我想知道您是否可以帮助我?: -> 赋值的左侧必须是一个变量 -> 我理解这一点,但应该自从我声明它 后,即使 left 不是变量,它也不行吗?谢谢我将在下一行发布完整的代码!
  • String giraffesays = "Giraffe 说:"; NEXT LINE status.setText(giraffesays +"Hi there!");
  • @Rich 原因不是 HTML 的问题。如果这是您的代码的精确复制粘贴,至少不会。这部分:&lt;font size="6"&gt; 应该是 &lt;font size=\"6\"&gt; 否则 6 不会被解释为字符串的一部分
  • 虽然您没有被标记为最佳答案,但我感谢您的回答。非常感谢!
猜你喜欢
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 2013-11-17
  • 2019-07-09
相关资源
最近更新 更多