我试图在JFrame上定位5个按钮。四个按钮应该在第一行,第五个按钮应该在第二行。但是这里所有的按钮都出现在一行中,第五个按钮的一半在面板之外。顺便说一下,如果我使用frame。pack();我的身材比我想象的要小。我不想改变帧的大小。我想在第二行找到第五个。
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.*;
public class test {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setBounds(100, 100, 529, 300);
frame.getContentPane().setLayout(new GridLayout(1, 0, 0, 0));
JPanel panel = new JPanel();
frame.getContentPane().add(panel);
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
JButton btnNewButton_4 = new JButton("New button");
panel.add(btnNewButton_4);
JButton btnNewButton_3 = new JButton("New button");
panel.add(btnNewButton_3);
JButton btnNewButton = new JButton("New button");
panel.add(btnNewButton);
JButton btnNewButton_1 = new JButton("New button");
panel.add(btnNewButton_1);
JButton btnNewButton_2 = new JButton("New button");
panel.add(btnNewButton_2);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
四个按钮应该在第一行,第五个按钮应该在第一行第二行
-
Oracle教程中关于如何使用布局管理器的标准和预订示例
-
使用GridLayout(两行)为JPanel,但所有的jbutton将有相同的尺寸
-
使用griddbaglayout,然后每个jbutton将有不同的大小或不太
-
不可见的JComponents或空的JLabel可以帮助你在最复杂的变化
您使用的是BoxLayout,其中组件不会自动换行(请查看API文档:http://docs.oracle.com/javase/6/docs/api/javax/swing/BoxLayout.html)
关于大小,尝试使用panel。setMinimumSize(维d)
我所做的是使用null作为布局管理器,并放置组件我的自我。如果你想让你的组件在窗口调整大小时被转发,或者你不知道applet的最终大小等
但大多数情况下,这不是真的或超过kill
只是将组件按像素放置在网格上setBounds (x, y,宽度、高度);例子:
JFrame frame = new JFrame();
frame.setBounds(100, 100, 529, 300);
frame.getContentPane().setLayout(null);//over ride default
Container c = frame.getContentPane();
JButton btnNewButton_4 = new JButton("New button");
c.add(btnNewButton_4);
c.seBounds(4,10,40,25);
JButton btnNewButton_3 = new JButton("New button 3");
c.add(btnNewButton_3);
c.seBounds(40,10,40,25);//...etc
- http://sel2in.com/prjs/aplt/go/Ap1a.html
- http://sel2in.com/prjs/aplt/go/
您也可以使用setBounds(arg1, arg2, arg3, arg4)方法。使用这个来获得更好的帮助。没有布局管理器(绝对定位)