Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使JLabel文本与中心垂直对齐_Java_Swing_Alignment_Jlabel_Layout Manager - Fatal编程技术网

Java 使JLabel文本与中心垂直对齐

Java 使JLabel文本与中心垂直对齐,java,swing,alignment,jlabel,layout-manager,Java,Swing,Alignment,Jlabel,Layout Manager,如何使JLabel文本与中心垂直和水平对齐 我必须使用setHorizontalTextPosition和setVerticalTextPosition。这可以通过使用这两种方法来实现吗 我已经试过了,但文本本身仍在顶部 import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingConstants; public class labe

如何使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方法不起作用

但是,我会让您知道,有几种方法可以在创建标签时通过插入参数和字符串对齐来对标签中的文本进行排序

首先,camickr的答案是最好的答案,因为Swing设计用于布局管理器

请记住,最推荐的方法是将GridBagLayout应用于camickr的JFrame布局

此答案旨在告知您: 这种方法也是可行的,但在正常情况下不推荐使用

不建议使用此方法,因为会更改框架的大小 保持组件在适当的位置,但它可以给你一点帮助 当指示组件的尺寸和位置在 容器的使用方式可以在特殊情况下使用,例如 当需要在没有外部影响的情况下进行修复时

为了更好地了解这个问题,我将简单地更改您上传给我的代码,以便可以执行它

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();
    }
 }
嗯,让我们在杰拉贝尔的背景中加上一些颜色来了解更多

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以使用绝对布局不推荐,仅此而已 2更改JLabel的大小和位置 在进展之后,我们可以看到文本对齐工作

1更改JFrame的布局

这表明在FlowLayout之外有很多布局

Swing设计为使用布局管理器,因此您当然应该使用上面的一个布局链接

但是,为了使用一种有趣的方式来修复组件的位置和大小,我们将切换到setLayoutnull

2更改JLabel的大小和位置

我们可以直接用方法改变JLabel的大小和位置

现在我们可以在中间看到JLable的文本! 此方法可以直接固定按钮上所有组件的大小和位置,但即使程序运行后JFrame的窗口大小发生变化,组件的位置和大小也会固定

所以,如果您真的希望通过这种方式绝对地设置组件,您可以通过在JFrame的代码上添加下面的代码来将JFrame Resizeable设置为false

this.setResizable(false);
我希望答案对你有帮助,祝你有一个平静的一天

我已经试过了,但文本本身仍在顶部

 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);
    }
 }
你有两个问题:

安德鲁解决了第一个问题。你使用了错误的方法。 接下来,您使用了错误的布局。FlowLayout仅在单行上显示组件,因此组件将始终位于顶部。不要更改布局管理器。JFrame的默认布局管理器是BorderLayout。将构件添加到中心时(未指定约束时为默认值),构件的大小将调整为填充整个框架。然后对齐特性将控制文本在分配给标签的大小内的位置。 或者另一种选择是使用GridBagLayout。这样,您就不需要使用零部件的对齐选项:

setLayout( new GridBagLayout() );
add(label, new GridBagConstraints());
尝试这两种方法,因为这两种方法在不同的情况下都可能有效


阅读上的Swing教程,以更好地了解每个布局管理器的工作原理。

1要更快获得更好的帮助,请添加或。该代码只需要一个main方法就可以成为MRE/SSCCE。2将标签作为唯一没有约束的组件放入GridBagLayout中-它将水平和垂直居中。。。3请学习常见的Java命名约定-例如,EachWordUpperCaseClass、firstWordLowerCaseMethod、firstWordLowerCaseAttribute,除非它是一个大写常量,并一致使用它。。。4请务必阅读所调用方法的文档。setHorizontalTextPosition并不像您想象的那样。这里需要的方法包括术语对齐。5调试布局或对齐问题时,向组件添加可见边框,例如线条边框。它可以揭示一些令人惊讶的结果。1-不要使用空布局。Swing设计用于布局管理器。您发布的代码未将文本居中。1逻辑不考虑帧的边框和2,如果帧的大小改变,组件将不被重新定位。@ CAMKICR AHA,谢谢您教我!为了你的努力,现在我学到了更多关于挥杆的知识!好吧,那最好是
为了提问者而修改我的帖子,对吗?我会给你一个关于帖子的投票,作为我的一点感谢。@camickr我很抱歉打扰你ㅠㅅㅠ 请告诉我修改后的答案中是否有任何部分需要修改?谢谢你的推荐,我能够更深入地研究我知道这只是众多方法之一的方法!代码中的方法仍然是错误的。例如,将setSize…语句更改为setSize500、200,看看会发生什么。方法应该是首先设置组件的大小,然后确定组件在父容器边界内的位置。布局管理就是这样工作的。