使JLabel中的文本动态调整大小

7

我有一个Java Swing JLabels数组。我的程序用户可以向JFrame添加新的JLabel,并且我希望根据JFrame中JLabel的数量更改JLabel文本的大小。如果JLabel太多,文本仍将适合并且不会重叠其他JLabel。


好的.. 你对这些内容有任何问题吗?如果有,可以随时编辑你的帖子并添加问题。最好附上一个SSCCE(http://pscode.org/sscce.html),说明你已经尝试过什么。 - Andrew Thompson
问题是,有什么好的代码可以动态调整标签中的文本大小,以便用户可以添加尽可能多的标签。 - italiano40
1个回答

2

看起来不太好看,但如果这正是你想要的,这里有一段快速编译和运行的代码。随意提取你项目所需的任何代码。玩得开心,- 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大小调整大小的东西。 - italiano40
欢迎您,很抱歉,我不理解评论的含义-哪一部分代码出现了问题? 我只是将其复制并粘贴到编辑器中,保存,编译并运行,没有出现任何问题。也许我没有正确理解您的问题-您想调整哪个组件的大小? 您是否希望JLabel具有固定(默认)字体大小? - Manidip Sengupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接