jlabel对整个文本显示太短

ndasle7k  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(448)

这是一个jlabel显示太短的示例,没有足够的空间用于“网站”(请参阅代码)部分。

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

public class JLabeleg extends JFrame
{
public JLabeleg()
{
    setTitle("Example");
    setSize(500,100);
    setVisible(true);
    setLocationRelativeTo(null);
    setLayout(new BorderLayout());

    Container eg = getContentPane();
    JPanel west = new JPanel(new GridLayout(2,1));
    JPanel center = new JPanel(new GridLayout(2,3));

    eg.add(west,BorderLayout.WEST);
    eg.add(center,BorderLayout.CENTER);

    west.add(new JLabel("Name         :  "));
    west.add(new JLabel("Website     :  "));

    center.add(new JLabel("Szekuns"));
    center.add(new JLabel(""));
    center.add(new JLabel(""));
    center.add(new JLabel("www.example.com.my/example/example"));
    center.add(new JLabel(""));
    center.add(new JLabel(""));

}

public static void main(String[] args)
{
    JLabeleg example = new JLabeleg();
    example.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

我的原始代码和这个示例的不同之处在于,jlabel的源代码实际上是一个来自io文件的对象加载的“settext”。这有关系吗?“还有什么可供选择的吗?”www.example.com/example/example“看得更清楚?也许是通过占据右手边的jlabel空间?

pb3s4cty

pb3s4cty1#

一种解决方法是使用 pack() 加载标签文本后。我不太喜欢这个解决方案,因为我发现它让用户感到不安。 GridLayout 很快还会向您展示一些重要的限制(如果您有一个大标签,而其他标签非常小,则会丢失大量可用空间,因为所有标签的大小都与最大的标签相同)。在所有情况下,我都建议只设置 GridLayout ,这样更容易维护。 GridBagLayout 可能是另一种选择,但需要多一点经验来掌握。
最后,一个 JTable 在你的情况下也许是一个更好的选择(但是我们缺乏你想要达到的目标的背景)。
这里有两个例子展示了你是如何完成任务的(但是还有很多其他可能更好的方法,解释你的目标可以帮助我们更加精确)。
示例1(使用 pack() 以及 GridLayout ):

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class JLabeleg extends JFrame {

    private List<JLabel> labels = new ArrayList<JLabel>();

    public JLabeleg() {
        setTitle("Example");
        setLayout(new BorderLayout());

        Container eg = getContentPane();
        JPanel west = new JPanel(new GridLayout(2, 1));
        final JPanel center = new JPanel(new GridLayout(0, 3));
        JButton load = new JButton("Load labels");
        load.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                int i = 0;
                for (JLabel label : labels) {
                    label.setText("A very very very long long long long label " + String.valueOf(++i));
                }
                JLabeleg.this.pack();
                JLabeleg.this.setLocationRelativeTo(null);
            }
        });
        eg.add(west, BorderLayout.WEST);
        eg.add(center, BorderLayout.CENTER);
        eg.add(load, BorderLayout.SOUTH);

        west.add(new JLabel("Name         :  "));
        west.add(new JLabel("Website     :  "));

        center.add(new JLabel("Szekuns"));
        center.add(new JLabel(""));
        center.add(new JLabel(""));
        center.add(new JLabel("www.example.com.my/example/example"));
        center.add(new JLabel(""));
        center.add(new JLabel(""));
        for (int i = 0; i < 12; i++) {
            JLabel label = new JLabel();
            center.add(label);
            labels.add(label);
    }
    pack();
    setLocationRelativeTo(null);
    setVisible(true);

}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new JLabeleg();
        }
    });

}
}

例2(使用 GridBagLayout 以及 revalidate() )

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class JLabeleg extends JFrame {

    private List<JLabel> labels = new ArrayList<JLabel>();

    public JLabeleg() {
        setTitle("Example");
        setLayout(new BorderLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container eg = getContentPane();
        JPanel west = new JPanel(new GridLayout(0, 2));
        final JPanel center = new JPanel(new GridBagLayout());
        JButton load = new JButton("Load labels");
        load.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                int i = 0;
                for (JLabel label : labels) {
                    label.setText("A very long label " + String.valueOf(++i));
                }
                center.revalidate();
            }
        });
        eg.add(west, BorderLayout.WEST);
        eg.add(center, BorderLayout.CENTER);
        eg.add(load, BorderLayout.SOUTH);

        west.add(new JLabel("Name         :  "));
        west.add(new JLabel("Szekuns"));
        west.add(new JLabel("Website     :  "));
        west.add(new JLabel("www.example.com"));
        GridBagConstraints gbc = new GridBagConstraints();
        GridBagConstraints endOfRow = new GridBagConstraints();
        endOfRow.gridwidth = GridBagConstraints.REMAINDER;
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 4; j++) {
                JLabel label = new JLabel();
                if (j + 1 < 4) {
                    center.add(label, gbc);
                } else {
                    center.add(label, endOfRow);
                }
                labels.add(label);
            }
        }
        setSize(1000, 300);
        setLocationRelativeTo(null);
        setVisible(true);

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JLabeleg();
            }
        });

    }
}

相关问题