我尝试了几个布局管理器(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);
它们应出现在我面板的左上角。
首先,我不确定哪种布局能满足我的需求。我虽然对BoxLayout很满意,但后来我无法布局网格部分(旋转器不会像标签那样达到相同的高度,或者标签不会占用相同的空间)。我试图使用GridBagLayout,但我不知道如何定义剩下的空间"。我不想设置固定数量的网格行/列。但也许我错过了什么? 或者我需要结合布局管理器? 有什么建议吗?
答案 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);
非常感谢所有提示。