我有使用組佈局來組織一些標籤的面板。重新調整大小時,我想保留屏幕中心。如果我使用流佈局將面板放在另一個面板內,我可以將標籤保持水平居中但不垂直居中。哪個佈局管理器將允許我將面板置於屏幕中央?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