如何使JLabel
文本与中心垂直和水平对齐?
我必须使用setHorizontalTextPosition
和setVerticalTextPosition
。通过使用这两个可以实现吗?
我已经尝试过,但文字仍然放在顶部。
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
public class label extends JFrame
{
private JLabel label;
public label() //constructor
{
super("Simple GUI");
setLayout(new FlowLayout());
label=new JLabel("Centered JLabel");
label.setHorizontalTextPosition(SwingConstants.CENTER);
label.setVerticalTextPosition(SwingConstants.CENTER);
add(label);
}
}
[非常抱歉,为什么setHorizontalTextPosition方法和setVerticalTextPosition方法不起作用。
但是,我会让您知道,有一种方法可以通过在创建标签时插入与String对齐的参数来对标签中的文本进行排序。
喜欢这个,
label=new JLabel("Centered JLabel", JLabel.CENTER);
但是在更改此行后,我们仍然可以看到文本对齐不适用的错误
为了更好地了解问题,我只需要更改您上载给我的代码,以便可以执行它。
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;
啊哈!!通过为JLabel的背景着色,因为JLabel本身的大小太小,所以我们可以发现构造函数仍然完好无缺!
实际上,构造函数确实运行良好,但是JFrame设置被设置为FlowLayout()
,这使得组件的位置和大小是固定的,因此我们看不到它起作用!
所以现在我们将经历以下两个过程。1)更改JFrame的布局2)更改JLabel的大小和位置进度完成后,我们可以看到文本对齐有效!
1)更改JFrame的布局
following link显示FlowLayout之外有太多布局。
但是,我们将切换到setLayout(null);
以直接控制组件的大小和坐标!
如果有时间,请尝试其余的布局!
2)更改JLabel的大小和位置
我们可以使用setBound(int startX, int startY, int Width, int Height)方法直接更改JLabel的大小和位置!
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.setOpaque(true); //Transparency Settings
label.setBackground(Color.pink); //Specify background color
//to use 'Color' class, We must import java.awt.Color;
label.setBounds(100,100,300,100);
/*
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的文本!
我希望答案对您有帮助,并有一个愉快的一天!