我正在尝试在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);
}
}
答案 0 :(得分:3)
四个按钮应位于第一行,第五个按钮应位于第一行 第二行。
Oracle教程中关于How to use Layout Managers
对JPanel使用GridLayout (two rows),但所有JButton都具有相同的维度
使用GridBagLayout,然后每个JButton都会有不同的大小或不同
隐形JComponents或空JLabel可以帮助您解决最复杂的变化
答案 1 :(得分:1)
您正在使用BoxLayout,其中组件不会换行(请查看API文档:http://docs.oracle.com/javase/6/docs/api/javax/swing/BoxLayout.html)
关于大小,尝试使用panel.setMinimumSize(Dimension d)
答案 2 :(得分:1)
我所做的是使用null作为布局管理器并将组件放在我自己的位置。如果您希望在调整窗口大小时中继组件或者您不知道applet的最终大小等,那么管理器可以正常工作
但大部分时间都不是真的或过度杀人
而是仅使用像素将组件放在网格上 的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
<强>样品强>
答案 3 :(得分:0)
您还可以使用setBounds(arg1,arg2,arg3,arg4)方法。使用它可以获得更好的帮助。 Doing Without a Layout Manager (Absolute Positioning)