我最近一直在阅读关于在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个选项具有相同的结果。
答案 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
的(水平和垂直)中心。
屏幕截图,用鼠标拖动以调整框架大小: