JLabel JFabel中心

时间:2016-05-26 15:25:53

标签: java swing jframe jlabel

我最近一直在阅读关于在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个选项具有相同的结果。

2 个答案:

答案 0 :(得分: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 );
         }
      } );
   }

答案 1 :(得分:0)

另外:

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的(水平和垂直)中心。

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

Screenshot