如何使用BorderLayout将具有首选大小的两个标签添加到面板?

时间:2012-09-26 04:46:06

标签: java swing layout jlabel border-layout

我正在尝试将标签添加到面板的北部和南部,并将面板添加到我的框架的中心。如果我自己没有指定标签的大小,那么程序是完美的,但是当我给它们特定的尺寸时:

label.setPreferredSize(di);
label2.setPreferredSize(di);
它变得凌乱!然而,面板和框架的尺寸更大,(100,100)任何想法?

import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;


import javax.swing.JFrame;

public class BorderLayoutDemo2 {

    public static void main(String args[])
    {
        Frame frame = new Frame();
    }
}

class Frame extends JFrame
{

    private static final long serialVersionUID = 1L;

    public Frame(){
        setSize(500,500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Dimension di = new Dimension(50,50);
        Dimension dim = new Dimension(200,200);

        JPanel panel = new JPanel();
        panel.setPreferredSize(dim);

        JLabel label = new JLabel("Here is my label");
        JLabel label2 = new JLabel("Here is my label2");



        JMenuBar menu = new JMenuBar();
        JMenu setting = new JMenu("Setting");
        JMenuItem exit = new JMenuItem("Exit");
        JMenuItem add = new JMenuItem("Add");
        setting.add(add);
        setting.add(exit);
        menu.add(setting);

        label.setPreferredSize(di);
        label2.setPreferredSize(di);

        panel.add(label,BorderLayout.NORTH);
        panel.add(label2,BorderLayout.SOUTH);

        add(menu,BorderLayout.NORTH);
        add(panel,BorderLayout.CENTER);


        pack();
        setVisible(true);
    }

}

1 个答案:

答案 0 :(得分:4)

当您添加组件时,您假设面板的布局为BorderLayout,即:panel.add(label,BorderLayout.NORTH);。但是,您没有设置布局,而JPanel使用的FlowLayoutdefault。你可以像这样解决它:

JPanel panel = new JPanel(new BorderLayout());