在 JFrame 上居中 JLabel

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

我最近一直在阅读有关在 JPanel 中居中 JLabel 的内容。我看到了很多以下两个答案:

label.setHorizontalAlignment(JLabel.CENTER);

并在 JLabel 的创建中

static JLabel label = new JLabel("Some Text Here", SwingConstants.CENTER);

我尝试过的这些选项都没有用。所有文本都与这两个答案保持一致(我什至尝试过同时使用它们,但没有成功)。这是我的一个标签及其实例化和所有内容的完整代码:

//JLabel title = new JLabel("Title", SwingConstants.CENTER);
JLabel title = new JLabel("Title");
title.setVisible(true);
title.setForeground(Color.BLACK);
title.setFont(new Font("Monospaced", Font.BOLD, 32));
//title.setHorizontalAlignment(JLabel.CENTER);
title.setLocation((int)width/2-190,10);
title.setSize(250,100);
frame.add(title);

我注释掉了刚刚对齐它并且应该可以工作的代码。对于设定的位置,我正在使用:

static Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
static double width = screenSize.getWidth();
static double height = screenSize.getHeight();

定义屏幕的参数,然后使用它来保持居中有点抽象。但是,很明显,监视器大小发生变化,10 次中有 9 次,我在此处为 setLocation 编写的代码不会将其置于屏幕中央。

我真的很好奇为什么这对我不起作用。是因为我没有将 JLabel 添加到 JPanel 中吗?我假设 JLabel 可以像放置在 JPanel 上一样放置在 JFrame 上。

编辑

我也试过了

frame.add(title,BorderLayout.CENTER);

与上面的其他 2 个选项有相同的结果。

java swing jframe jlabel
2个回答
4
投票

这对我有用(注意:SwingConstants.CENTER,而不是 SwingConstraints.CENTER):

   public static void main( String[] args ) {
      SwingUtilities.invokeLater( new Runnable() {
         @Override
         public void run() {
            JFrame jf = new JFrame();
            jf.addWindowListener( new WindowAdapter() {
               @Override
               public void windowClosing( WindowEvent arg0 ) {
                  System.exit( 0 );
               }
            } );
            JLabel t = new JLabel( "Centered", SwingConstants.CENTER );
            jf.add( t, BorderLayout.CENTER );
            jf.setSize( 300, 300 );
            jf.setVisible( true );
         }
      } );
   }

2
投票

还有:

import java.awt.Color;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.LineBorder;

public class CenterDemo2 {
  public static void main(final String[] args ) {
      SwingUtilities.invokeLater( new Runnable() {
         @Override
         public void run() {
            final JFrame frame = new JFrame("Test frame");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            final JLabel label = new JLabel("Test label");
            label.setBorder(new LineBorder(Color.BLUE, 2)); //Adding a border for clarity.

            //Most significant two lines of code:
            final JPanel containerPanel = new JPanel(new GridBagLayout());
            containerPanel.add(label);

            frame.getContentPane().add(containerPanel); //or: frame.setContentPane(containerPanel);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
         }
      });
   }
}  

JLabel
位于
JPanel
的(水平和垂直)中心。

屏幕截图,用鼠标拖动调整框架大小后:

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