java是否可以使GridBagLayout的JPanel中的元素从左上角开始?
我有一个Swing表单,它包含一个JPanel(activityScrollPane
)的JScrollPane(activityPanel
)。该面板包含一个JTextField和一个JButton(用于向面板添加更多字段)。现在的问题是,元素从面板的中心开始,如下图所示(边界标记为activityScrollPane
边界)
下面是我目前用来制作滚动窗格和相关组件的代码
//part of the code for creating the ScrollPane
final JPanel activityPanel = new JPanel(new GridBagLayout());
gbc.gridx=0;
gbc.gridy=0;
JScrollPane activityScrollPane = new JScrollPane(activityPanel);
//adding activity fields
activityFields = new ArrayList<JTextField>();
fieldIndex = 0;
activityFields.add(new JTextField(30));
final GridBagConstraints activityGBC = new GridBagConstraints();
activityGBC.gridx=0;
activityGBC.gridy=0;
activityGBC.anchor = GridBagConstraints.FIRST_LINE_START;
activityPanel.add(activityFields.get(fieldIndex),activityGBC);
fieldIndex++;
JButton btn_more = (new JButton("more"));
activityGBC.gridx=1;
activityPanel.add(btn_more,activityGBC);
如何使JTextField和JButton或任何组件显示在JScrollPane的左上角。我已经试过使用
activityConstraints.anchor = GridBagConstraints.NORTHWEST;
正如SO{a1}中所指出的,但它似乎根本不起作用
# 1 楼答案
使用边框布局:
controls.setLayout(new BorderLayout());
尝试一下,然后将其应用于您的JPanelcontrols.add(yourPanel, BorderLayout.PAGE_START);
我也有
GridBagLayout
的问题,所以我用BorderLayout
解决了它,而且效果很好所以我为你的小例子写下:
希望有帮助
# 2 楼答案
我认为这可能是简单和可能的,你可以
到这个
JPanel
JPanels
包含JComponent
放在GridLayout上(注意滚动,您必须更改滚动增量)或者使用最复杂的
JComponents
作为将
JPanels
包含JComponent
作为项目放入JList将
JPanels
包含JComponent
作为行放入JTable(只有一列,有或没有TableHeader
)# 3 楼答案
在右侧和底部分别添加一个面板
右侧面板: 将权重X设置为1.0。 将填充设置为水平
底部面板: 将权重Y设置为1.0。 将填充设置为垂直
也许有更好的方法,但这一种对我有效
# 4 楼答案
很抱歉,我的回答与你的问题不符,但是你为什么不使用GroupLayout而不是GridBag布局呢?这样更容易处理
# 5 楼答案
您只是忘记提供任何
weightx/weighty
值,至少一个非零值就可以了。请看下面的代码示例:最新编辑:沿Y轴无间距