GridLayout到GridBagLayout的问题

时间:2014-02-19 14:15:06

标签: java eclipse swing gridbaglayout

所以我曾经是一名优秀的GUI程序员,但似乎我已经失去了相当多的GridBagLayout知识。

我要做的是制作一个带有JPanels的自定义框。我首先使用GridLayout,但是根据我研究的内容,实际上没有办法为每个盒子自定义“%width / height”,它只是简单地将它们全部展开。

所以我的拳头尝试就是这样。

(GridLayout的) enter image description here

我继续环顾四周,我相信我需要使用GridBagLayout。所以我花了一个小时的时间看一些例子,我觉得我只是因为缺乏更好的词语而“只是”没有得到它。我已经尝试为GridBagLaout实现各种测试代码,但我永远无法完全满足我的需要。

我的问题是,有人可以给我一个我正在寻找的骨架设置吗?我不想要整个代码,只需要基本的骨架,这样我就可以自己搞清楚(这样我实际上“得到它”)。

所以,通过骨架,我的意思是为我做一个方框,然后请愚蠢的每一步做什么,以便我可以尝试对其余方框遵循相同的过程。

我期待最终得到的是......

(我想要的GridBagLayout) enter image description here

就实际百分比而言,我正在考虑:

宽度:绿色/红色边为80%,蓝色边为20%。

高度:红色为80%,绿色/白色为20%。

我目前正在完成一个项目,但我希望我能在今晚某个时候开始研究这个项目。

非常感谢您将来的所有帮助! -Austin

1 个答案:

答案 0 :(得分:2)

试试这个:

import java.awt.*;
import javax.swing.*;

public class GridBagDemo implements Runnable
{
  public static void main(String[] args)
  {
    SwingUtilities.invokeLater(new GridBagDemo());
  }

  public void run()
  {
    JComponent redComp = new JPanel();
    redComp.setBackground(Color.RED);

    JComponent greenComp = new JPanel();
    greenComp.setBackground(Color.GREEN);

    JComponent blueComp = new JPanel();
    blueComp.setBackground(Color.BLUE);

    JComponent whiteComp = new JPanel();
    whiteComp.setBackground(Color.WHITE);

    GridBagConstraints gbc = new GridBagConstraints();
    // we'll use this anchor/fill for all components
    gbc.anchor = GridBagConstraints.NORTHWEST;
    gbc.fill = GridBagConstraints.BOTH;

    JPanel panel = new JPanel(new GridBagLayout());

    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.gridwidth = 2;
    gbc.gridheight = 1;
    gbc.weightx = 0.8;  // use 80% of the overall width
    gbc.weighty = 0.8;  // use 80% of the overall height
    panel.add(redComp, gbc);

    gbc.gridx = 2;
    gbc.gridy = 0;
    gbc.gridwidth = 1;
    gbc.gridheight = 2;
    gbc.weightx = 0.2;  // use 20% of the overall width
    gbc.weighty = 1.0;  // use 100% of the overall height
    panel.add(blueComp, gbc);

    gbc.gridx = 0;
    gbc.gridy = 1;
    gbc.gridwidth = 1;
    gbc.gridheight = 1;
    gbc.weightx = 0.8;  // use 80% of the width used by green/white comps
    gbc.weighty = 0.2;  // use 20% of the overall height
    panel.add(greenComp, gbc);

    gbc.gridx = 1;
    gbc.gridy = 1;
    gbc.gridwidth = 1;
    gbc.gridheight = 1;
    gbc.weightx = 0.2;  // use 20% of the width used by green/white comps
    gbc.weighty = 0.2;  // use 20% of the overall height
    panel.add(whiteComp, gbc);

    JFrame frame = new JFrame("GrigBag Demo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(panel);
    frame.setSize(400, 300);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}