面板左上角有摆动组件的网格

时间:2015-11-17 13:33:32

标签: java swing layout

我尝试了几个布局管理器(BoxLayout,BorderLayout,GridBagLayout),但我没有得到我想要的东西......我必须布局四个组件。

JLabel label1 = new JLabel("This is label 1");
JLabel label2 = new JLabel("This is another label");
SpinnerModel spinnerModel1 = new SpinnerNumberModel(-1, -1, Integer.MAX_VALUE, 1);
SpinnerModel spinnerModel2 = new SpinnerNumberModel(-1, -1, Integer.MAX_VALUE, 1);
JSpinner spinner1 = new JSpinner(spinnerModel1);
JSpinner spinner2 = new JSpinner(spinnerModel2);

它们应出现在我面板的左上角。

enter image description here

首先,我不确定哪种布局能满足我的需求。我虽然对BoxLayout很满意,但后来我无法布局网格部分(旋转器不会像标签那样达到相同的高度,或者标签不会占用相同的空间)。我试图使用GridBagLayout,但我不知道如何定义剩下的空间"。我不想设置固定数量的网格行/列。但也许我错过了什么? 或者我需要结合布局管理器? 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我在FlowLayout中找到了使用GridBagLayout的解决方案。到目前为止,使用标准布局管理器的最优雅方式是:

    JPanel optionsPanel = new JPanel();

    JLabel label1 = new JLabel("This is label 1");
    JLabel label2 = new JLabel("This is another label");
    SpinnerModel spinnerModel1 = new SpinnerNumberModel(-1, -1, Integer.MAX_VALUE, 1);
    SpinnerModel spinnerModel2 = new SpinnerNumberModel(-1, -1, Integer.MAX_VALUE, 1);
    JSpinner spinner1 = new JSpinner(spinnerModel1);
    JSpinner spinner2 = new JSpinner(spinnerModel2);

    JPanel gridPanel = new JPanel();
    gridPanel.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    c.anchor = GridBagConstraints.LINE_START;

    c.gridx = 0;
    c.gridy = 0;
    gridPanel.add(label1, c);
    c.gridx = 0;
    c.gridy = 1;
    gridPanel.add(label2, c);
    c.gridx = 1;
    c.gridy = 0;
    gridPanel.add(spinner1, c);
    c.gridx = 1;
    c.gridy = 1;
    gridPanel.add(spinner2, c);

    optionsPanel.setLayout(new FlowLayout(FlowLayout.LEADING));
    optionsPanel.add(gridPanel);

非常感谢所有提示。