使用BorderLayout创建两个偶数列

时间:2014-10-24 17:28:36

标签: java swing border-layout

我正在尝试使用BorderLayout()创建一个程序,我希望看起来像这样(但是左右高度等等)

enter image description here

虽然我无法调整两个JPanels的大小(大盒子里的两个盒子)。目前我的GUI看起来像这样,

enter image description here

我相信这是由于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();
    }

}

1 个答案:

答案 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));

您的中心组件将占用额外的宽度,因为EASTWEST组件只会垂直拉伸。

所以你需要使用另一个LayoutManager。您可以使用Visual guide to layout managers来掌握可用的LayoutManager及其功能。该文件指出GridLayout将是一个很好的候选人:

  

GridLayout简单地使一组组件的大小相等,并以请求的行数和列数显示它们