【问题标题】:Making text in a JLabel dynamically resize使 JLabel 中的文本动态调整大小
【发布时间】:2011-06-12 22:29:44
【问题描述】:

我有一组 Java Swing JLabels。我的程序的用户可以在 JFrame 中添加一个新的 JLabel,我想根据框架中 JLabel 的数量来改变 JLabel 中文本的大小。如果 JLabel 过多,则文本仍然适合且不会与其他 JLabel 重叠。

【问题讨论】:

  • 好的..您对此有任何疑问吗?如果是这样,请随时编辑您的帖子并添加问题。最好使用您已经尝试过的 SSCCE (pscode.org/sscce.html)。
  • 问题是有什么好的代码可以动态调整标签中的文本大小,以便用户可以添加任意数量的标签

标签: java swing jlabel layout-manager


【解决方案1】:

看起来不漂亮,但如果这是您想要的,这里有一段快速编译和运行的代码。随意提取项目所需的任何代码。玩得开心,-M.S.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class LabelSize extends JPanel {     

    private Font        font;
    private JPanel      panel;
    private JLabel      label = new JLabel ("Font Size Adapter Label", JLabel.CENTER);
    private JTextField  tf = new JTextField ("Type in text for new label here and hit [Enter]");

    public LabelSize() {         
        super (new BorderLayout());
        panel = labelPanel();
        add (panel, "North");
        add (tf, "South");
        tf.addActionListener (new ActionListener () {
            public void actionPerformed (ActionEvent e) {
                label.setText (tf.getText());
                label.setFont (font);
                int labelW = (int) Math.ceil (label.getPreferredSize().getWidth());
                int maxWidth = (int) Math.floor (panel.getSize().getWidth());
                if (labelW <= maxWidth)
                    return;
                for (int k = 1 ; labelW > maxWidth ; k++) {
                    Font labelFont = font.deriveFont (font.getSize() - k*1.0f);
                    label.setFont (labelFont);
                    labelW = (int) Math.ceil (label.getPreferredSize().getWidth());
        }}});
    } 

    private JPanel labelPanel() {
        JPanel lp = new JPanel(new BorderLayout());
        lp.setPreferredSize (new Dimension (270,30));
        lp.add (label, "North");
        font = label.getFont();
        return lp;
    }

    public static void main (String[] args) {
        JFrame lsFrame = new JFrame ("Lfit");
        lsFrame.add (new LabelSize());
        lsFrame.pack();
        lsFrame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        lsFrame.setVisible(true);
}}

【讨论】:

  • 感谢您的代码,但是没有一个对我有用,我需要根据 Jlabel 的大小调整大小的东西
  • 不客气,对不起,我不明白评论 - 代码的哪一部分不起作用?我只是将它复制粘贴到编辑器上,保存,编译并运行它,运行得很好。可能是我没有正确回答您的问题 - 您想要调整哪个组件(某物)的大小?您是否希望 JLabels 具有固定(默认)字体?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 2013-08-23
  • 2020-11-30
  • 1970-01-01
  • 2015-01-21
相关资源
最近更新 更多