问题描述
好了,就像标题中所说的那样,这应该是一个简单的问题,但是我对使用gui还是很陌生,但是我遇到了一些问题。
我试图将我的窗口分成3个带边框的部分(水平)。
到目前为止,我有两个,但是中间的一个向下延伸到窗口的底部,阻塞了底部。
我猜这与我使用NORTH,CENTER和SOUTH有关吗?
我附上了窗口的图片和一些代码,如果您需要更多,请告诉我!
上节
public NamePanel(){
Dimension size = getPreferredSize();
size.height = 125;
setPreferredSize(size);
//setBorder(BorderFactory.createTitledBorder("Who owes who money?"));
setBorder(BorderFactory.createTitledBorder("Who?"));
JRadioButton button;
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
button = new JRadioButton("Bob");
gc.anchor = GridBagConstraints.CENTER;
gc.weightx = 0.5;
gc.weighty = 0.0;
gc.gridx = 1;
gc.gridy = 0;
add(button, gc);
button = new JRadioButton("Sue");
gc.weighty = 0.5;
gc.gridx = 3;
gc.gridy = 0;
add(button, gc);
中段
public ActionsPanel(){
Dimension size = getPreferredSize();
size.height = 75;
setPreferredSize(size);
setBorder(BorderFactory.createTitledBorder("What would you like to do?"));
JRadioButton button;
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
button = new JRadioButton("Add");
gc.anchor = GridBagConstraints.NORTH;
gc.weightx = 0.5;
gc.weighty = 0.0;
gc.gridx = 1;
gc.gridy = 0;
add(button, gc);
底部(隐藏在图片中)
public EntryPanel(){
Dimension size = getPreferredSize();
size.height = 75;
setPreferredSize(size);
setBorder(BorderFactory.createTitledBorder("Enter the transaction"));
JLabel why = new JLabel("Why?: ");
JTextField transName = new JTextField(10);
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.anchor = GridBagConstraints.SOUTH;
add(transName, gc);
1楼
这几乎是BorderLayout
工作方式。
BorderLayout
具有五个可以显示组件的位置,但是每个位置只能占据一个组件。
看看了解更多详细信息
根据您的需要,可以使用GridBagLayout
,类似...
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx = 1;
add(namePanel, gbc);
add(actionsPanel, gbc);
add(entryPanel, gbc);
它将在容器内垂直布置三个组件,但仅在那儿保持首选高度,因此不会扩展以垂直填充整个容器
看一下在以及以获得更多详细信息
别忘了,您可以使用多种布局(通过使用多个容器)来生成所需的结果
您应该避免使用setPreferredSize
,只需要让容器和布局管理器来处理它。
请参阅
更多细节。
您还应该尝试在JFrame
上使用pack
,以允许窗口将其自身打包在内容周围