我正在学校的项目中为GUI编写程序,使用了swing中的GridBagLayout布局方式。我希望在布局中添加标签来指示输入内容(文件类型 @ x = 0, y = 0),接着是另一个标签(一旦选择了实际文件,则显示其名称 @
为了实现这个目标,我尝试将标签放到面板上,并进行布局调整。然而,我似乎无法达到所需的结果。是否有人可以提供一些建议?GridBagLayout的下三行将以完全相同的方式进行布局。
以下是GUI屏幕截图的链接:
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的最小尺寸,这应该能满足您的需求。 - Hovercraft Full Of EelsGridBagLayout
设置最小大小是行不通的。请查看我的答案以获取详细信息,并指出我解释错误的地方 :) - Sage