2013-05-03 115 views
1

我正在编写程序,但是我的JLabel没有显示出来。我的JButton完美地工作(看起来),但由于某种原因JLabel没有出现。我检查了互联网,但我没有找到任何东西。JLabel不显示

package com.hinx.client; 

import java.awt.Color;  
import javax.swing.*; 

public class Main { 

    public static void main(String [] args) 
    { 
     createWindow(); 
    }  

    static void createWindow() 
    {   

     //Create panel 
     JPanel content = new JPanel(); 
     content.setLayout(null); 

     //Build the frame 
     JFrame frame = new JFrame("Hinx - A marketplace for apps - Client ALPHA_0.0.1"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(700, 400); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null); 
     frame.add(content); 
     frame.setVisible(true); 

     //Add the login button 
     JButton login = new JButton("Login"); 
     login.setBounds(0, 342, 150, 30); 

     //Create login label 
     JLabel loginlabel = new JLabel("Login Area"); 

     //Create login panel 
     JPanel loginpanel = new JPanel(); 
     loginpanel.setLayout(null); 
     loginpanel.setBounds(0, 0, 150, 400); 
     loginpanel.setBackground(Color.gray); 
     loginpanel.add(login); 
     loginpanel.add(loginlabel);   

     content.add(loginpanel); 
    }  
} 

回答

5

panel设置一个layout。每例如:

loginpanel.setLayout(new BorderLayout()); 

您可以了解更多关于布局here

这里就是我得到: enter image description here

+0

它的工作原理!谢谢!今天我学到了一件新事物! – 2013-05-03 13:48:56

+0

我得到了同样的东西! – 2013-05-03 13:51:28

+0

我可以在8分钟内接受答案。 – 2013-05-03 13:51:57

5

我检查了互联网上,但我没有发现任何东西。

  • JFrame的是可见的加入JComponents(frame.add(content);)前/创建

  • 移动代码线frame.setVisible(true);(更好的一切的JFrame)至constuctor

2
  1. 的端部

    使用布局。在这种情况下,FlowLayout应该没问题。请勿拨打setBounds(),也不要将版面设置为null

  2. 添加标签和按钮JPanel

  3. 然后在JFrame

  4. 呼叫pack()而不是setSize()

  5. 在结束通话setVisible(true)添加JPanel

祝你好运!

2

您正在制作setLayout null

JPanel loginpanel = new JPanel(); 
    loginpanel.setLayout(null); 

使用此,

JPanel loginpanel = new JPanel(); 
    loginpanel.setLayout(new BorderLayout());   

运行在EDT而非主线程上运行的UI。阅读post

例子:

public static void main(String [] args) 
    { 
     Runnable r = new Runnable() { 

      @Override 
      public void run() { 
       createWindow(); 
      } 
     }; 

     EventQueue.invokeLater(r); 
    }