我最近一直在阅读有关将JLabel放在JPanel中的信息。我已经看到很多以下两个答案:

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();


定义屏幕的参数,然后使用该参数使居中效果保持抽象。但是,显然监视器大小发生了变化,十分之九,我在这里为setLocation编写的代码不会在屏幕上居中显示。

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

编辑

我也尝试过

frame.add(title,BorderLayout.CENTER);


并具有与上述其他2个选项相同的结果。

最佳答案

这对我有用(注意: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 );
         }
      } );
   }

10-07 13:22
查看更多