非常抱歉不知道为什么 setHorizontalTextPosition 方法和 setVerticalTextPosition 方法不起作用。
但是,我会让你知道,有几种方法可以通过在创建标签时插入参数与字符串对齐来对标签中的文本进行排序。
首先,camickr 的答案是最好的答案,因为 Swing 被设计为与布局管理器一起使用!!
请记住,最推荐的方法是通过camickr将GridBagLayout()应用到JFrame的Layout上。
此答案旨在通知您
这种方法也可以,但一般情况下不推荐
不建议使用此方法,因为会更改框架的大小
将组件保持在适当的位置,但它可以为您提供一些帮助
当表明组件的尺寸和位置时
容器的使用方式可以在特殊情况下使用,例如
当它们需要在没有外部影响的情况下进行修复时。
为了更好地了解问题,我将简单地更改您上传给我的代码,以便它可以执行。
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Color;
public class StackOver extends JFrame
{
private JLabel label;
public StackOver() //constructor
{
super("Simple GUI");
setLayout(null);
setSize(500,300);
label=new JLabel("Centered JLabel", JLabel.CENTER);
/*
label.setHorizontalTextPosition(SwingConstants.CENTER);
label.setVerticalTextPosition(SwingConstants.CENTER);*/
add(label);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new StackOver();
}
}
嗯,让我们在 JLabel 的背景中添加一些颜色以了解更多信息。
label.setOpaque(true); //Transparency Settings
label.setBackground(Color.pink); //Specify background color
//to use 'Color' class, We must import java.awt.Color;
JFrame 设置被设置为FlowLayout()这使得组件的位置和大小是固定的,所以我们看不到它工作!
所以现在我们将完成接下来的两个过程。
1)将JFrame的布局改为null以使用Absolute Layout(“不推荐,只是一个案例”)
2) 更改 JLabel 的大小和位置
在进度之后我们可以看到文本对齐工作!
1) 更改 JFrame 的布局
following link: Layout Manager 表明 FlowLayout 之外还有很多布局。
Swing 被设计为使用布局管理器,因此您当然应该使用上面的 Layout 链接之一。
但是,要使用一种有趣的方式来绝对固定组件的位置和大小,我们将切换到setLayout(null);!
2) 更改 JLabel 的大小和位置
我们可以直接用setBounds(int startX, int startY, int Width, int Height)方法改变JLabel的大小和位置!
import java.awt.FlowLayout;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Color;
public class StackOver extends JFrame
{
private JLabel label;
public StackOver() //constructor
{
super("Simple GUI");
setLayout(null);
setSize(500,300);
label=new JLabel("Centered JLabel", JLabel.CENTER);
// Since it also sets the size of the JLabel,
//let's use the constructor to set the alignment of the text inside the JLabel.
label.setOpaque(true); //Transparency Settings
label.setBackground(Color.pink); //Specify background color
//to use 'Color' class, We must import java.awt.Color;
Rectangle r = this.getBounds(); //to get Frame Size
label.setBounds(r.x+100, r.y+100, r.width-200, r.height-200);
/*
label.setHorizontalTextPosition(SwingConstants.CENTER);
label.setVerticalTextPosition(SwingConstants.CENTER);*/
add(label);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new StackOver();
}
}
现在我们可以看到中间的 JLabel 文本了!
这种方法可以直接固定所有组件(例如按钮)的大小和位置,但是即使程序运行后JFrame的窗口大小发生变化,组件的位置和大小也是固定的。
所以如果你真的想通过这种方式设置组件,你宁愿通过在JFrame的代码上添加下面的代码来设置JFrame Resizable false
this.setResizable(false);
希望回答对您有所帮助,祝您度过愉快的一天!