使JLabel文本垂直居中对齐

问题描述 投票:0回答:1

如何使JLabel文本与中心垂直和水平对齐?

我必须使用setHorizontalTextPositionsetVerticalTextPosition。通过使用这两个可以实现吗?

我已经尝试过,但文字仍然放在顶部。

 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);
    }
 }
java swing alignment jlabel layout-manager
1个回答
0
投票

[非常抱歉,为什么setHorizo​​ntalTextPosition方法和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();
    }
 }

enter image description here

构造函数是否拒绝我们的订单?好吧,让我们在JLabel的背景中添加一些颜色以了解更多信息。

label.setOpaque(true);            //Transparency Settings
label.setBackground(Color.pink);      //Specify background color
//to use 'Color' class, We must import java.awt.Color;

enter image description here

啊哈!!通过为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();
    }
 }

enter image description here

现在我们可以按预期在中间看到JLabel的文本!

我希望答案对您有帮助,并有一个愉快的一天!

© www.soinside.com 2019 - 2024. All rights reserved.