GridBagLayout填充

时间:2010-01-26 18:20:06

标签: java swing user-interface gridbaglayout

我使用GridBagLayout来(当前)显示两行。我知道这个布局对于这个任务来说太过分了,但我正在努力学习如何使用它。问题是我已将两个面板添加到两个单独的行中,并且内容周围存在巨大差距(请参阅下面的图像和代码): alt text http://www.imagechicken.com/uploads/1264533379009864500.png

Image background;
    public Table(){
        super();
        ImageIcon ii = new ImageIcon(this.getClass().getResource("pokerTableV2.png"));
        background = ii.getImage();
        setSize(Constants.FRAME_WIDTH, Constants.TABLE_HEIGHT);

        setLayout(new GridBagLayout());

        GridBagConstraints constraints = new GridBagConstraints();
        constraints.gridx = 0;
        constraints.gridy = 0;
        constraints.fill = GridBagConstraints.HORIZONTAL;

        JButton button = new JButton("hello world");
        JPanel panel1 = new JPanel();
        panel1.setPreferredSize(new Dimension(800,100));
        panel1.add(button, BorderLayout.CENTER);
        panel1.setBackground(Color.yellow);
        add(panel1, constraints);

        constraints.gridx = 0;
        constraints.gridy = 1;

        JPanel middlePanel = new JPanel();
        middlePanel.setPreferredSize(new Dimension(800,350));
        middlePanel.add(button, BorderLayout.CENTER);
        middlePanel.setBackground(Color.blue);
        add(middlePanel, constraints);


    }

2 个答案:

答案 0 :(得分:7)

使用

constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1d;
constraints.weighty = 1d;
weightx / weighty

JavaDoc说:

  

指定如何分配额外的水平/垂直空间。

fill

JavaDoc

  

当组件的显示区域较大时使用此字段   比组件的请求大小。它决定了是否   调整组件大小,如果是,如何。

答案 1 :(得分:4)

不幸的是,对于GridBagLayout,如果内容没有填充它所在的整个容器,它将自动将其所有内容集中在其容器中。这就是为什么你会有一个很大的差距。

基本上有两种解决方法:

  1. 艰难的方法:摆​​弄GridBagConstraints。在试图避免集中行为时,我的成功有限。
  2. 简单方法:将GridBagLayout放在FlowLayout内,然后将FlowLayout的左对齐设置为左上角,或任何您想要的对齐方式。
  3. 我上周的某个时候曾问过并回答this question

    因此,在您的情况下,您将panel1middlePanel直接添加到JFrame(?),并GridBagLayout

    JFrame (GridBagLayout)
     - panel1
     - middlePanel
    

    我建议使用这种替代结构,以消除所有额外空间(如果你愿意,也可以去掉中心对齐)。

    JFrame (FlowLayout)
     - JPanel (GridBagLayout)
       - panel1
       - middlePanel
    

    HTH