我有一个JPanel
,里面有两个JLabel
个组件:headerLabel
和timeLabel
问题在于我无法让headerLabel
坐在面板的中央,timeLabel
坐在最右边。我尝试了几种不同的布局管理器(GridBagLayout
,BorderLayout
等)和技术(Box.createHorizontalStrut(X)
,添加了Insets
),他们最终都推了headerLabel
在最左边和timeLabel
到最右边或将它们放在中间。
下面是我希望它看起来的图形表示:
http://i67.tinypic.com/2mowf9l.png
我应该使用特定的布局管理器来获得此结果吗?
答案 0 :(得分:4)
我尝试了几种不同的布局管理器(GridBagLayout,BorderLayout等)
好吧,发布你的代码。我们无法猜测你可能在做什么。
我会使用BorderLayout.CENTER
。
向BorderLayouyt.LINE_END
添加一个标签,向setLayout( new BorderLayout() ):
JLabel center = new JLabel("CENTER");
center.setHorizontalAlignment(JLabel.CENTER); // maybe you are missing this
add(center, BorderLayout.CENTER);
JLabel right = new JLabel("RIGHT");
add(right, BorderLayout.LINE_END);
添加另一个标签。
/S
当有额外的水平空间时,告诉文本如何对齐自己。
答案 1 :(得分:1)
你应该可以使用GridBagLayout到达那里。
headerPanel将位于0,0,其中FILL_BOTH,居中且fillx = 1.0
timePanel将位于0,1并且没有其他填充选项。
现在,这些显示器在很大程度上取决于渲染原始面板的大小。如果它位于JDialog或任何其他pack()
编辑的容器中,它们仍然会出现并且#34;并排#34;因为这是布置这些元素的最佳方式。
如果这还有问题,你可以指定最小值和最小值。 headerPanel的首选大小,以便打包不会将其缩小到该大小以下。
GridBagLayout gridBagLayout = new GridBagLayout();
gridBagLayout.columnWidths = new int[]{0, 0, 0};
gridBagLayout.rowHeights = new int[]{0, 0};
gridBagLayout.columnWeights = new double[]{1.0, 0.0, Double.MIN_VALUE};
gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
setLayout(gridBagLayout);
JLabel lblHeader = new JLabel("HEADER");
GridBagConstraints gbc_lblHeader = new GridBagConstraints();
gbc_lblHeader.weightx = 1.0;
gbc_lblHeader.insets = new Insets(0, 0, 0, 5);
gbc_lblHeader.gridx = 0;
gbc_lblHeader.gridy = 0;
add(lblHeader, gbc_lblHeader);
JLabel lblTime = new JLabel("TIME");
GridBagConstraints gbc_lblTime = new GridBagConstraints();
gbc_lblTime.gridx = 1;
gbc_lblTime.gridy = 0;
add(lblTime, gbc_lblTime);