2016-08-26 14 views
1

ログインダイアログボックスのステータスバーを作成しようとしていますが、ラベルがステータスパネルの左に揃っていません。ここに私のコードです。JLabelをJPanelの内部に配置する方法はありますか?

public class LoginDialog extends JDialog { 

    private static final long serialVersionUID = 1L; 

    protected JLabel lblTopSpace = null; 
    protected JPanel loginPanel = null; 
    protected JPanel statusPanel = null; 

    public LoginDialog(String title) { 

     super((Dialog)null); 

     this.setTitle(title); 

     Initialize(); 
    } 

    protected void Initialize() { 

     lblTopSpace = new JLabel("Login into Bookyard"); 
     lblTopSpace.setForeground(this.getBackground()); 

     loginPanel = new LoginPanel(); 
     statusPanel = new JPanel(); 

     statusPanel.setBorder(new BevelBorder(BevelBorder.LOWERED)); 
     statusPanel.setSize(this.getWidth(), 50); 

     JLabel lblStatus = new JLabel("Status"); 
     lblStatus.setFont(new Font("Verdana", Font.PLAIN, 12)); 
     lblStatus.setHorizontalAlignment(SwingConstants.LEFT); 
     statusPanel.add(lblStatus); 

     this.setLayout(new BorderLayout()); 
     Container container = this.getContentPane(); 

     container.add(lblTopSpace, BorderLayout.NORTH); 
     container.add(loginPanel, BorderLayout.CENTER); 
     container.add(statusPanel, BorderLayout.SOUTH); 

     this.pack(); 
    } 
} 

これは現在のようです。

enter image description here

私は何をしないのですか?

答えて

2

あなたのラベルは、ダイアログのコンテンツペイン内にあるパネルの内側にあります。したがって、ラベルは親パネルのレイアウトで管理されます。しかし、あなたはそれのための特別なレイアウトを設定していない、そしてそれはFlowLayoutです、そして、あなたのラベルはテキストが現れるようにするのに必要な最小限のサイズでそれの中心に置かれます。ラベルはそれ自身の領域で左揃えになりますが、このラベルはパネルの中央に配置されます。

パネルのレイアウトを変更して、ラベルがその内部に広がるようにします(BorderLayoutを追加してラベルの北、中央、または南にラベルを設定するか、または役に立たないと思われるパネルを削除します) contentPaneの南に。

statusPanel.setLayout(new BorderLayout()); 
statusPanel.add(lblStatus,BorderLayout.SOUTH); 

または

container.add(lblStatus,BorderLayout.SOUTH); 
+0

あなたは正しい。私は:-)。ことを逃しました –

関連する問題