2013-05-31 35 views
2

新手Java程序员在这里:为什么JLabel不在这个Java应用程序的中心?

我讨厌问的问题我每次碰到问题的时候,但我不明白我应该用什么来获得绿色的“Hello World”的标签,直接进入到JPanel的中心。这里是我的代码:

package game; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Javagame extends JPanel implements ActionListener{ 
    protected JButton b1; 
    private JLabel label; 
    public Javagame() { 
     b1 = new JButton("Button!"); 
     b1.setActionCommand("change"); 

     b1.addActionListener(this); 
     add(b1); 

     label = new JLabel("Hello World!", SwingConstants.CENTER); 
     label.setFont(new Font("Arial", Font.BOLD, 20)); 
     label.setForeground(new Color(0x009900)); 
     add(label, BorderLayout.CENTER); 
    } 
    public void actionPerformed(ActionEvent e) { 
     if ("change".equals(e.getActionCommand())) { 
      label.setText("Hello Universe!"); 
      b1.setActionCommand("changeBack"); 
     } 
     if ("changeBack".equals(e.getActionCommand())) { 
      label.setText("Hello World!"); 
      b1.setActionCommand("change"); 
     } 
    } 
    private static void createWindow(){ 
     JFrame frame = new JFrame("Javagame"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setPreferredSize(new Dimension(500,500)); 

     Javagame newContentPane = new Javagame(); 
     newContentPane.setOpaque(true); 
     frame.setContentPane(newContentPane); 

     frame.setLocationRelativeTo(null); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
    public static void main(String[] args) { 
     createWindow(); 
    } 
} 

BorderLayout.CENTER似乎并不add()工作。任何帮助将不胜感激,谢谢!

回答

2

JLabel位于父容器中居中,文本在标签内对齐。

的Try ...

label.setHorizontalAlignment(JLabel.CENTER); 
label.setVerticalAlignment(JLabel.CENTER); 
+0

您好,感谢您的回复。我应该在哪里放置代码?我将代码插入到'public(public)Javagame()'上面'add(label,BorderLayout.CENTER);'但它不起作用。 对不起,我发牢骚... – BitLion

+0

好吧,你可以把它放在任何地方,但是我会在你将标签添加到容器之前把它放入 – MadProgrammer

+0

水平/垂直对齐默认为CENTER。这段代码是不需要的。 – camickr

2

BorderLayout.CENTER似乎并没有工作

一个JPanel的默认布局是FlowLayout中。您需要将布局设置为BorderLayout。

此外,您需要将按钮添加到BorderLayout的北部。

然后按钮将出现在顶部,标签将居中。

0

添加标签时使用FlowLayout字段。

//Code apove 
label = new JLabel("Hello World!", SwingConstants.CENTER); 
label.setFont(new Font("Arial", Font.BOLD, 20)); 
label.setForeground(new Color(0x009900)); 
add(label, FlowLayout.CENTER);//!! 
//Code under 

因为您没有更改面板中的布局,请不要使用BorderLayout。

如果你真的想使用BorderLayout比FlowLayout还要添加setLayout()命令。

//Code apove 
label = new JLabel("Hello World!", SwingConstants.CENTER); 
label.setFont(new Font("Arial", Font.BOLD, 20)); 
label.setForeground(new Color(0x009900)); 
setLayout(new BorderLayout()); //!! 
add(label, BorderLayout.CENTER); 
add(b1,BorderLayout.????); //Edited 
//Code under 

@Edit - 添加按钮的setLayout()太后的方法或设置布局在刚开始的时候,你让你面板

+0

感谢您的回答!由于我现在不在我的主要版本(包含所有文件的版本),因此我无法编辑我的代码,但稍后我会检查它。 :) – BitLion

+0

-1,这个答案是提前2小时。没有必要混淆与重复的答案论坛。没有代码示例的是 – camickr

+0

是的。我想给一些代码示例。你的答案与我的相似。 – Leolian

相关问题