【发布时间】:2013-11-13 08:10:58
【问题描述】:
我正在为学校的一个项目开发 GUI。我在摇摆中使用 GridBagLayout。
我想要一个标签来指示输入(一种文件@x = 0,y = 0),然后是另一个标签(实际文件名一旦选择@x = 1, y = 0),然后是一个浏览按钮一个文件选择器(@x = 2, y = 0)。 (1,0) 的标签最初是空白的,但是当标签不包含文本时,我希望文本将占据的区域占用一些空间。我还希望(0,0) 处的标签和(2,0) 处的按钮之间的空间保持不变。
为了实现这一点,我尝试将标签放在面板上,然后使用布局。但是我无法缝合以达到预期的效果。有人可以提供一些建议吗? GridBagLayout 的接下来三行将以完全相同的方式布局。
这里是 GUI 屏幕截图的链接。
calibrationFileSelectionValueLabel = new JLabel("",Label.LEFT);
calibrationFileSelectionValueLabel.setName("calibrationFileSelection");
calibrationFileSelectionValueLabel.setMinimumSize(new Dimension(100,0));
calibrationFileSelectionValuePanel = new JPanel();
calibrationFileSelectionValuePanel.setBorder(BorderFactory.createEtchedBorder());
calibrationFileSelectionValuePanel.add(calibrationFileSelectionValueLabel);
c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.NONE;
filesPanel.add(calibrationFileLabel,c);
c.gridy = 1;
filesPanel.add(frequencyFileLabel,c);
c.gridy = 2;
filesPanel.add(sampleFileLabel,c);
c.gridy = 3;
filesPanel.add(outputFileLabel,c);
c.gridx = 1;
c.gridy = 0;
c.fill = GridBagConstraints.BOTH;
// filesPanel.add(calibrationFileSelection,c);
filesPanel.add(calibrationFileSelectionValuePanel,c);
c.gridy = 1;
// filesPanel.add(frequencyFileSelection,c);
filesPanel.add(frequencyFileSelectionValueLabel,c);
c.gridy = 2;
// filesPanel.add(sampleFileSelection,c);
filesPanel.add(sampleFileSelectionValueLabel,c);
c.gridy = 3;
// filesPanel.add(outputFileSelection,c);
filesPanel.add(outputFileSelectionValueLabel,c);
c.gridx = 2;
c.gridy = 0;
c.fill = GridBagConstraints.NONE;
filesPanel.add(calibrationFileSelectionButton,c);
c.gridy = 1;
filesPanel.add(frequencyFileSelectionButton,c);
c.gridy = 2;
filesPanel.add(sampleFileSelectionButton,c);
c.gridy = 3;
filesPanel.add(createOutputFileButton,c);
panelForFilesPanelBorder = new JPanel();
panelForFilesPanelBorder.setBorder(BorderFactory.createCompoundBorder(new EmptyBorder(5,10,5,10), BorderFactory.createEtchedBorder()));
panelForFilesPanelBorder.add(filesPanel);
buttonsPanel = new JPanel();
buttonsPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
buttonsPanel.setBorder(BorderFactory.createCompoundBorder(new EmptyBorder(5,10,10,10), BorderFactory.createEtchedBorder()));
buttonsPanel.add(startButton);
buttonsPanel.add(stopButton);
basePanel.add(panelForFilesPanelBorder);
basePanel.add(numericInputPanel);
basePanel.add(buttonsPanel);
【问题讨论】:
-
拍张照片,上传到其他地方并添加到您的问题中,以便我们更好地理解
-
您可以通过调用
setMinimumSize(Dimension d)来设置 JLabel 的最小尺寸,这应该可以满足您的需求。 -
嗯。好吧,我尝试添加图像。我显然需要 10 票。
-
添加图片链接,我们可以为您将其添加到您的问题中。我的建议呢?
-
@HovercraftFullOfEels,在这种情况下,
GridBagLayout仅设置最小尺寸将不起作用。检查我的答案以获取详细信息,并指出我所解释的任何内容是否有误:)
标签: java swing gridbaglayout