我有使用组布局来组织一些标签的面板。重新调整大小时,我想保留屏幕中心。如果我使用流布局将面板放在另一个面板内,我可以将标签保持水平居中但不垂直居中。哪个布局管理器将允许我将面板置于屏幕中央?Java布局管理器垂直中心
我也尝试了边界布局,并将其放置在中心,但它调整到窗口大小。
我有使用组布局来组织一些标签的面板。重新调整大小时,我想保留屏幕中心。如果我使用流布局将面板放在另一个面板内,我可以将标签保持水平居中但不垂直居中。哪个布局管理器将允许我将面板置于屏幕中央?Java布局管理器垂直中心
我也尝试了边界布局,并将其放置在中心,但它调整到窗口大小。
尝试使用GridBagLayout
并将该面板添加一个空的GridBagConstrants
对象。
例如:
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setLayout(new GridBagLayout());
JPanel panel = new JPanel();
panel.add(new JLabel("This is a label"));
panel.setBorder(new LineBorder(Color.BLACK)); // make it easy to see
frame.add(panel, new GridBagConstraints());
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
首先,我要指出,阅读我的文章布局:http://web.archive.org/web/20120420154931/http://java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr/。这是旧的,但非常有用(不幸的是那篇文章的预日期的BoxLayout我有一些幻灯片时我给了那个说话的JavaOne大会上,其中包括的BoxLayout在http://javadude.com/articles/javaone)
尝试BoxLayout的:
Box verticalBox = Box.createVerticalBox();
verticalBox.add(Box.createVerticalGlue());
verticalBox.add(stuffToCenterVertically);
verticalBox.add(Box.createVerticalGlue());
,如果你想居中的东西,用HorizontalBox作为stuffToCenterVertically:容易
Box horizontalBox = Box.createHorizontalBox();
horizontalBox.add(Box.createHorizontalGlue());
horizontalBox.add(stuffToCenter);
horizontalBox.add(Box.createHorizontalGlue());
方式来“看”的代码要比网格包
面板上的GroupLayout本身为GroupLayout.Alignment.CENTER
,纵向和横向,setPreferredSize(new Dimension(yourChosenWidth,yourChosenHeight))
设置面板不调整大小。
您也可以在面板上设置setMinimumSize和setMaximum大小,以确保安全。
如果您感觉时髦,可以通过仔细选择并行/连续组并适当分组标签来为整个事情使用单个GroupLayout。
您可以构建自己的LayoutManager以将单个组件(两个轴或一个组件)居中。这是在两个轴上进行的,你可以很容易地将它改变为垂直或水平居中。
当前实现布局的第一个可见的孩子,你可以改变太...
public class CentreLayout implements LayoutManager, java.io.Serializable {
public void addLayoutComponent(String name, Component comp) {
}
public void removeLayoutComponent(Component comp) {
}
public Dimension preferredLayoutSize(Container target) {
return target.getPreferredSize();
}
public Dimension minimumLayoutSize(Container target) {
return target.getMinimumSize();
}
public void layoutContainer(Container target) {
synchronized (target.getTreeLock()) {
Insets insets = target.getInsets();
Dimension size = target.getSize();
int w = size.width - (insets.left + insets.right);
int h = size.height - (insets.top + insets.bottom);
int count = target.getComponentCount();
for (int i = 0; i < count; i++) {
Component m = target.getComponent(i);
if (m.isVisible()) {
Dimension d = m.getPreferredSize();
m.setBounds((w - d.width)/2, (h - d.height)/2, d.width, d.height);
break;
}
}
}
}
}
我一直想知道如何做到这一点,最终我放弃了,使用MigLayout代替。 – gencoreoperative 2011-11-02 15:08:52
这就是我认为的gridbag:http://madbean.com/anim/totallygridbag/ :) – qben 2013-03-04 08:58:32
当容器小于孩子的首选大小(但大于最小大小)时,GridBagLayout将失败。 – 2017-02-13 16:56:13