如何设置JLabel的固定大小?

16

我正在尝试制作一个Java桌面应用程序,使用了多个JLabel,想要设置它们的固定高度和宽度。我该如何实现?

以下是我的代码:

public class Second extends JFrame
{
    JPanel panel1,panel2;
    JLabel label=new JLabel();
    ArrayList<JLabel> lbllist = new ArrayList<>();

    public Second()  
    {
        super("Simple Timer");
        {
            getContentPane().setBackground(new java.awt.Color(255,255,255));
        } 
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout( new FlowLayout());
        setUndecorated(true);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(0,0,screenSize.width, screenSize.height);

        panel2=new JPanel();
        panel2.setBounds(360, 180, 360, 1020);
        panel2.setBackground(new java.awt.Color(255,153,51));
        c.add(panel2);
        JPanel panel3 = createPanel();
        panel1.setLayout(new GridBagLayout());
        panel1.add(panel3);

        JPanel panel4 = createPanel(); 
        panel2.setLayout(new GridBagLayout());
    //  jPanel2.setLayout(null);
        panel2.add(panel4);

        setLayout(null);
   }

   private JPanel createPanel() {
        JPanel panel = new JPanel(new GridLayout(0, 1, 10, 5));
        EmptyBorder panelBorder = new EmptyBorder(10, 5, 10, 10);
        panel.setBorder(panelBorder);
        panel.setBackground(new java.awt.Color(255, 153, 51));
        panel.setOpaque(true);
        EmptyBorder border1 = new EmptyBorder(5, 20, 15, 18);

        Border border = BorderFactory.createLineBorder(Color.BLUE, 2);
        for (int i = 0; i <11; i++) {
            label = new JLabel("<html>Case &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Item&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CaseNum<br><font color=yellow>Party1<br>Party2</font></html>");
            label.setFont(new java.awt.Font("Times New Roman", 1, 18));
            label.setBorder(border);
            label.setSize(300, 100);
            label.setBorder(border1);
            Dimension d = label.getPreferredSize();
            label.setBackground(Color.GRAY);
            label.setForeground(new java.awt.Color(255, 255,255 ));
            label.setOpaque(true);
            lbllist.add(label);
            panel.add(label);
        }
        return panel;
    }

当我减小JLabel的文本大小或者删除文本时,JLabel的大小也会减小,但是我想即使我减小或者删除了JLabel里的任何文本,它的大小也应该不变。

我该如何实现这个效果呢?

先行感谢。


4个回答

20
您可以通过设置最小、首选和最大大小来设置固定大小:
setMinimumSize(width, height);
setPreferredSize(width, height);
setMaximumSize(width, height);

根据MadProgrammer链接,您需要覆盖这些方法,而不是从外部使用它们,原因在此链接中提到。


1
我将不得不使用所有三个或任何一个。 - user3506824
你可以使用 setMaximumSize,但我想向你展示 API 提供了什么。 - Salah
然后尝试使用上述方法。 - Salah
我使用了JLabel,但是当我从JLabel中删除任何内容时,JLabel的大小会减小。 - user3506824
你可能想要考虑查看以下内容:在Java Swing中,我应该避免使用set(Preferred|Maximum|Minimum)Size方法吗? - MadProgrammer
显示剩余3条评论

5
如果这种方法不起作用。
setMinimumSize(width, height);
setPreferredSize(width, height);
setMaximumSize(width, height);

然后使用它

setMinimumSize(new Dimension(width, height));
setPreferredSize(new Dimension(width, height));
setMaximumSize(new Dimension(width, height));

2
一个简单的解决方法(不需要覆盖现有类)是:
  • 为组件创建一个特定的JPanel

  • 设置JPanel的大小

  • 将组件放置在JPanel中

  • 将JPanel放置在原来组件的位置

例如:
JPanel mainPanel = new JPanel(); //Assume this is the panel you are placing things into.

JLabel nameLabel = new JLabel("Name:");
JPanel nameLabelPanel = new JPanel();
nameLabelPanel.setPreferredSize(new Dimension(100, 25));
JPanel.add(nameLabel);
mainPanel.add(nameLabelPanel);

2

使用JLabel.setPreferredSize(width, height);

jpanel没有布局,请尝试使用JPanel pane = new JPanel(new FlowLayout());


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