bgu*_*uiz 4 java alignment jpanel jscrollpane gridbaglayout
在我的GUI应用程序中,我有几个JPanel,它们在我的程序运行期间的各个点被实例化,并且某些操作将导致其中一个显示在滚动窗格中:
mViewport.setViewportView(currentPanel);
Run Code Online (Sandbox Code Playgroud)
问题是,我的面板是使用Grid Bag Layouts完成的,其行为是将其自身置于其内部的JScrollPane中.这使得GUI看起来很奇怪.
有人知道强制网格包布局面板左上角对齐的方法吗?
谢谢!
编辑
请注意,我在这里询问整个面板在其滚动窗格内的对齐情况,而不是面板内的组件.
您需要GridBagConstraints
在面板内的一个或多个组件上设置权重(在)中.这具有"推动"组件以占用更多可用空间的效果(没有重量,组件将仅占用他们需要的东西,并且面板将在可用空间内居中).
如果要对齐滚动窗格左上角的组件,请将底部组件的y权重设置为1.0,并将最右侧组件的x权重设置为1.0.
在一些摆弄之后我找到了解决自己问题的方法:
设置权值似乎是能够内的影响的部件的对准JPanel
的量,GridBagLayout
而使用.但是,它对JPanel
内部的对齐没有影响JScrollPane
.
我发现了一个相当简单的解决方案,就是不要把它JPanel
直接放在内部JScrollPane
,就像我之前使用的代码一样:
if (currentPanel != mCurrentPanel)
{
mViewport.setViewportView(currentPanel);
}
Run Code Online (Sandbox Code Playgroud)
...而是将"外部" JPanel
置于其中JScrollPane
,并将其设置为使用FlowLayout
.然后,当我想切换面板时,我将旧的移除并将面板放在"外部"面板中.
if (currentPanel != mCurrentPanel)
{
if (mCurrentPanel != null)
{
mOuterPanel.remove(mCurrentPanel);
}
mCurrentPanel = currentPanel;
mOuterPanel.add(mCurrentPanel);
}
Run Code Online (Sandbox Code Playgroud)
这种方法运作得相当好,因为这意味着我只需要在一个类中进行更改,而不是在我所拥有的许多面板中进行更改.
归档时间: |
|
查看次数: |
8143 次 |
最近记录: |