我有以下代码:
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
for(int xx =0; xx < 3; xx++)
{
JLabel label = new JLabel("String");
label.setPreferredSize(new Dimension(300,15));
label.setHorizontalAlignment(JLabel.RIGHT);
panel.add(label);
}
这就是我希望文本的外观:
[ String]
[ String]
[ String]
它的外观如何
[String]
[String]
[String]
由于某种原因,标签没有设置为我指定的首选大小,我认为因此,它没有正确对齐我的标签文本。但我不确定。任何帮助将不胜感激。
答案 0 :(得分:13)
JLabel label = new JLabel("String", SwingConstants.RIGHT);
:)
答案 1 :(得分:5)
我认为这取决于您正在使用的布局,在XY中(我记得在JBuilder中是某种布局)它应该可以工作,但在其他情况下可能会有问题。尝试将最小尺寸更改为首选尺寸。
答案 2 :(得分:5)
setPreferredSize / MinimumSize / MaximumSize方法取决于父组件的布局管理器(在本例中为面板)。
首先尝试使用setMaximumSize而不是setPreferredSize,如果我没有出错应该使用BoxLayout。
此外:可能你必须使用和玩胶水:
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(label);
panel.add(Box.createHorizontalGlue());
如果您需要Y_AXIS BoxLayout,您还可以使用嵌套面板:
verticalPanel.setLayout(new BoxLayout(verticalPanel, BoxLayout.Y_AXIS));
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(label);
panel.add(Box.createHorizontalGlue());
verticalPanel.add(panel);
答案 3 :(得分:3)
这有点令人讨厌,但如果您希望在对齐方面比在网格布局方面更灵活,则可以使用带有框布局的嵌套JPanel。
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
for (int xx = 0; xx < 3; xx++) {
JPanel temp = new JPanel();
temp.setLayout(new BoxLayout(temp,BoxLayout.LINE_AXIS));
JLabel label = new JLabel("String");
temp.add(Box.createHorizontalGlue());
temp.add(label);
panel.add(temp);
}
我使用水平胶将其保持在右侧,无论大小,但你可以放入刚性区域使其达到特定的距离。
答案 4 :(得分:2)
您需要确保LayoutManager
调整标签大小以填充目标区域。您可能有一个JLabel
组件,其大小与文本的长度完全相同,并且在布局中保持对齐。
答案 5 :(得分:2)
myLabel#setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
答案 6 :(得分:1)
而不是使用
label.setHorizontalAlignment(JLabel.RIGHT);
使用
label.setHorizontalAlignment(SwingConstants.RIGHT);
因此你有:
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
for(int xx =0; xx < 3; xx++)
{
JLabel label = new JLabel("String");
label.setPreferredSize(new Dimension(300,15));
label.setHorizontalAlignment(SwingConstants.RIGHT);
panel.add(label);
}
答案 7 :(得分:1)
你能不能使用以下内容?
Jlabel label = new JLabel("String");
label.setBounds(x, y, width, height); // <-- Note the different method used.
label.setHorizontalAlignment(JLabel.RIGHT);
这至少在JFrame
容器内有效。不确定JPanel
。
答案 8 :(得分:0)
根据你们的回复,我能够确定BoxLayout不支持我想要的文本对齐方式,所以我将其更改为
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3,1,0,0);
一切正常。