2016-09-27 98 views
2

我正在做簡單的登錄屏幕。我在我的程序中在JFrame中添加了兩個JLabel,但它運行成功,但問題是,當我運行該程序時,我得到了空白屏幕和空的jframe,但是我在該框架中添加了兩個jlabel,但它沒有向我顯示任何內容,然後如果我最小化窗口,一段時間後,如果我再次打開窗口,那麼我可以看到這些組件。我有關於jframe和jlabel的一些問題?

這裏是我的代碼:

package javaapplication41; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.*; 

public class JavaApplication41 { 


    JavaApplication41() 
    { 
     JFrame cpec=new JFrame(); 
     cpec.setBounds(300,200,600,350); 
     cpec.setUndecorated(false); 
     cpec.setVisible(true); 
     cpec.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      JLabel l = new JLabel(new ImageIcon("C:\\Users\\MUHAMMAD SHAHAB\\Documents\\NetBeansProjects\\Real Estate\\src\\real\\estate\\file (2).jpg")); 
      l.setBounds(100,100,200,125); 
      //l.setLayout(null); 
      cpec.add(l);    
      JLabel kiq=new JLabel(new ImageIcon("C:\\Users\\MUHAMMAD SHAHAB\\Documents\\NetBeansProjects\\Real Estate\\src\\real\\estate\\bla.jpg")); 
       kiq.setBounds(100,100,100,100); 
       //kiq.setLayout(null); 
     l.add(kiq); 
    } 
    public static void main(String[] args) { 
     JavaApplication41 ne=new JavaApplication41(); 
    } 

} 

我得到這個輸出,當我運行程序:

blank window

,當我最小化這個窗口並再次打開這個,然後我得到期望的輸出是:

enter image description here

我做錯了什麼?

回答

2

你必須把cpec.setVisible(true);你jframe.I將所有的物品後希望這必將解決您的問題

1

您已經在很早的階段設置了JFrame的可見性。那時JLabel沒有被添加。當你最小化和調整你的框架,它再次呈現導致顯示你添加的組件。 請記住在設置框架的可見性之前添加組件(最後設置可見性)。

另外,我建議你在擺動組件上工作時使用GUI線程。請參考此處的擺動實用程序:https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html

最後將JFrame的佈局設置爲null,因爲您試圖使用setBounds()方法向特定座標添加標籤。

1

jframe的默認佈局是BorderLayout,所以如果你想要你可以通過引用java.awt.Container抽象類來改變佈局。

它由javax.swing.JFrame類的getContentPane()初始化。 這些組件僅通過參考java.awt.Container類添加。

java.awt.Container c=cpec.getContentPane(); 
c.setLayout(new FlowLayout(FlowLayout.LEFT)); 
c.add(l); //label will get added to JFrame instance that is referenced 
//then define size and at last define visibility 
cpec.setSize(500, 500); 
cpec.setVisible(true); 
0

設置容器爲空的佈局管理器。默認情況下,它使用BorderLayout作爲其佈局管理器。您只需使用JFrame的引用即可調用getContentPane()方法,該方法返回容器引用。例如:

Container c = frame.getContentPane(); 
c.setLayout(null); 

欲瞭解更多信息,你可以通過my Website