我正在尝试使用BorderLayout()创建一个程序,我希望看起来像这样(但是左右高度等等)
虽然我无法调整两个JPanels的大小(大盒子里的两个盒子)。目前我的GUI看起来像这样,
我相信这是由于CENTER仍在那里,我抬头看看如何删除它但无法让它工作,
问题
我可以编辑它,使其看起来像顶部图像。
package fuelstation;
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class Fuelstation extends JFrame {
JButton btn1 = new JButton("Random Button");
public Fuelstation() {
JFrame frame = new JFrame("Fuel Station");
frame.setLayout(new BorderLayout());
frame.setResizable(false);
frame.setPreferredSize(new Dimension(500,350));
frame.setMaximumSize(new Dimension(500,350));
// Left Hand Side
JPanel lhs = new JPanel();
JTextArea tf_list = new JTextArea();
tf_list.setEditable(false);
tf_list.setWrapStyleWord(true);
tf_list.setText("This is a list of items");
lhs.add(tf_list);
tf_list.setSize(245, 325);
lhs.setBorder(BorderFactory.createTitledBorder("Left"));
// Left Hand Side End
// Right Hand Side
JPanel rhs = new JPanel();
rhs.setAlignmentX(Component.CENTER_ALIGNMENT);
rhs.setBorder(BorderFactory.createTitledBorder("Right"));
rhs.add(btn1);
tf_list.setSize(245, 325);
JPanel center = new JPanel();
center.setSize(0, 0);
// Right Hand Side End
frame.add(lhs, BorderLayout.WEST);
frame.add(center, BorderLayout.CENTER);
frame.add(rhs, BorderLayout.EAST);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
Fuelstation gui = new Fuelstation();
}
}
答案 0 :(得分:3)
您需要放弃使用BorderLayout
的要求。使用BorderLayout
时组件的调整大小政策在class javadoc
组件根据其首选尺寸和容器尺寸的限制进行布局。 NORTH和SOUTH组件可以水平拉伸; EAST和WEST组件可以垂直拉伸; CENTER组件可以水平和垂直拉伸,以填充剩余的空间。
强制您将JFrame
强制为特定尺寸
frame.setResizable(false);
frame.setPreferredSize(new Dimension(500,350));
frame.setMaximumSize(new Dimension(500,350));
您的中心组件将占用额外的宽度,因为EAST
和WEST
组件只会垂直拉伸。
所以你需要使用另一个LayoutManager
。您可以使用Visual guide to layout managers来掌握可用的LayoutManager
及其功能。该文件指出GridLayout
将是一个很好的候选人:
GridLayout简单地使一组组件的大小相等,并以请求的行数和列数显示它们