我最近一直在阅读有关将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 );
}
} );
}