垂直轴中间的 Java JLabel 文本

Posted

技术标签:

【中文标题】垂直轴中间的 Java JLabel 文本【英文标题】:Java JLabel text in middle of vertical axis 【发布时间】:2011-11-28 00:14:09 【问题描述】:

我有一个JLabel,它在我的 GUI 的某个位置包含可变文本。问题是文本显示在JLabel 所在空间的底部。这不会向最终用户传达有关 GUI 其他内容的相关信息。相反,我需要将JLabel 的文本打印在JLabel 的垂直轴的中间。我的代码的简化版本如下。谁能告诉我如何改变它,使文本显示在垂直轴的中间而不是底部?

Main.java:

import java.awt.*;
import javax.swing.*;

public class Main 
    public static void main(String[] args) 
        JFrame frame = new JFrame("Main");      
        frame.getContentPane().setLayout(new FlowLayout());
        frame.getContentPane().add(new VerticalLabel("Hello"));
        Dimension prefSize = new Dimension(400, 300);
        frame.setPreferredSize(prefSize);
        frame.setMinimumSize(prefSize);
        frame.pack();
        frame.setVisible(true);
    

VerticalLabel.java:

import javax.swing.*;
import java.awt.*;
import javax.swing.border.EtchedBorder;

public class VerticalLabel extends JLabel 
    public VerticalLabel(String labelText) 
        Dimension myDim = new Dimension(15, 250);
        this.setPreferredSize(myDim);
        this.setHorizontalAlignment(LEFT);
        this.setVerticalAlignment(CENTER);
        this.setText(labelText);
        this.setVerticalTextPosition(CENTER);
        this.setUI(new VerticalLabelUI(false));
        this.setBorder(new EtchedBorder());
    

【问题讨论】:

为了尽快获得更好的帮助,请移植SSCCE。 【参考方案1】:

硬编码随机首选大小不是一个好主意。

您编写了一个自定义 UI,因此 UI 负责将文本绘制在适当的位置。

您可以使用Text Icon 方法来显示垂直文本,而不是创建自定义用户界面。创建标签如下:

JLabel label = new JLabel();
label.setHorizontalAlignment(JLabel.CENTER);
TextIcon labelIcon = new TextIcon(label, "Hello", TextIcon.Layout.VERTICAL);
label.setIcon( vIcon );

使用 BorderLayout 将标签添加到面板的 CENTER,垂直文本将垂直和水平居中。

【讨论】:

【参考方案2】:

import javax.swing.*;
import java.awt.*;
import javax.swing.border.EtchedBorder;

public class VerticalLabel extends JLabel

    public VerticalLabel(String labelText) 
        this.setHorizontalAlignment(LEFT);
        this.setVerticalAlignment(CENTER);
        this.setText(labelText);
        this.setVerticalTextPosition(CENTER);
        //this.setUI( new VerticalLabelUI(false) );
        this.setBorder( new EtchedBorder() );
    

    public static void main(String[] args)
        // should be done on the EDT.
        JFrame frame = new JFrame("Main");
        frame.getContentPane().setLayout( new GridBagLayout() );
        frame.getContentPane().add(new VerticalLabel("Hello"));
        Dimension prefSize = new Dimension(200,150);
        frame.setPreferredSize(prefSize);
        frame.setMinimumSize(prefSize);
        frame.pack();
        frame.setVisible(true);
    

【讨论】:

以上是关于垂直轴中间的 Java JLabel 文本的主要内容,如果未能解决你的问题,请参考以下文章

文本如何在 div 中垂直对齐中间

使 JLabel 文本与中心垂直对齐

如何垂直对齐div的文本和图像中间? [复制]

CSS垂直对齐文本到图像的中间[重复]

垂直对齐:按钮中的文本中间

如何在图像的垂直中间显示带有前后文本的图像?