今天,我有一个JFrame和一个名为panelMain的Jpanel。我对框架和面板的所有设置都是完美的。我已经将panelMain的Layout设置为BorderLayout。现在,我创建了另一个名为panel1的面板。 panel1具有空布局。我向panel1添加了一些按钮(布局为null)。然后我将panel1添加到panelMain的WEST中。当我运行程序时,panelMain出现了,但是panel1没有出现。然后我将panel1的布局从null更改为FlowLayout,然后它出现在panelMain的WEST侧。我不知道放入BorderLayout时空布局面临什么问题,有人可以帮帮我吗。
JPanel panelMain = new JPanel();
JPanel panelWEST = new JPanel();
JButton button = new JButton();
JButton button2 = new JButton();
Constructor(){
setContentPane(panelMain);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setExtendedState(Frame.MAXIMIZED_BOTH);
panelMain.setLayout(new BorderLayout());
panelMain.setBackground(Color.CYAN);
panelWEST.setLayout(null);
button.setBounds(50,50,200,200);
button.setText("West Button1");
button2.setBounds(50,300,200,200);
button2.setText("West Button2");
panelWEST.setBackground(Color.PINK);
panelWEST.add(button);
panelWEST.add(button2);
panelMain.add(panelWEST,BorderLayout.WEST);
答案 0 :(得分:2)
不要使用空布局!!! Swing旨在与布局管理器一起使用。
使用随机数绝不是一个好主意,这正是您尝试猜测组件大小时正在做的事情。
每个Swing组件都有责任确定自己的首选大小。然后,布局管理器使用此信息来设置添加到面板的组件的大小/位置。使用空布局时,您将失去此功能。
作为解决方案,您可以执行以下操作:
JPanel buttonPanel = new JPanel( new GridLyaout( 0, 1) );
buttonPanel.add(button1);
buttonPanel.add(button2);
JPanel west = new JPanel( new BorderLayout() );
west.add(buttonPanel, BorderLayout.PAGE_START);
panelMain.add(west, BorderLayout.LINE_START);
如果您想在buttonPanel的左侧留出空间,则可以使用EmptyBorder
。阅读Swing Tutorial中的示例。有关以下内容的区域: