2013-06-22 155 views
0

我在YouTube上練習教程。它在這裏 - >http://www.youtube.com/watch?v=QdbKQ5h9yZg&list=PL70BFBF88CE38C556JFrame顯示不正確

我檢查了幾十次以下的代碼。但我仍不明白爲什麼JFrame沒有正確顯示。雖然我把尺寸設置爲600x400(或更大),但是當我運行該項目時仍然沒有改變,JFrame尺寸沒有改變,但標籤沒有顯示。哪裏有問題?

這是我的代碼:

package doanjava; 
import java.sql.*; 

public class db { 

    Connection con; 
    Statement st; 
    ResultSet rs; 

    public db(){ 
     connect(); 
    } 

    public void connect(){ 
     try{ 
      String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; 
      Class.forName(driver); 

      String db = "jdbc:odbc:ketnoi"; 
      con = DriverManager.getConnection(db); 
      st = con.createStatement(); 
      String sql = "select * from HoSoSinhVien"; 
      rs = st.executeQuery(sql); 

      while(rs.next()) 
      { 
       String Ho = rs.getString("Ho"); 
       String Ten = rs.getString("Ten"); 
       String Tuoi = rs.getString("Tuoi"); 
       String Lop = rs.getString("Lop"); 
       String SoDienThoai = rs.getString("SoDienThoai"); 
       String DiaChi = rs.getString("DiaChi"); 

       System.out.println(Ho+" "+Ten+" | "+"Tuoi: "+Tuoi+" | "+"Lop :"+Lop+" | "+"SDT: "+SoDienThoai+" | "+"Dia Chi: "+DiaChi); 
      } 
     }catch(Exception ex){ 
     } 
    } 

    public static void main(String[] args) { 
     new db(); 
     new gui(); 
    } 
} 

package doanjava; 
import javax.swing.*; 

public class gui { 

    JFrame f; 
    JLabel Ho; 
    JLabel Ten; 
    JLabel Tuoi; 
    JLabel Lop; 
    JTextField t; 
    JTextField t1; 
    JTextField t2; 
    JTextField t3; 

    public gui(){ 
     frame(); 
    } 

    public void frame(){ 
     f = new JFrame(); 
     f.setVisible(true); 
     f.setSize(600,400); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     Ho = new JLabel("Ho"); 
     Ten = new JLabel("Ten"); 
     Tuoi = new JLabel("Tuoi"); 
     Lop = new JLabel("Lop"); 

     t = new JTextField(10); 
     t1 = new JTextField(10); 
     t2 = new JTextField(10); 
     t3 = new JTextField(10); 

     JPanel p = new JPanel(); 
     p.add(Ho); 
     p.add(t); 
     p.add(Ten); 
     p.add(t1); 
     p.add(Tuoi); 
     p.add(t2); 
     p.add(Lop); 
     p.add(t3); 

     f.add(p); 
    } 
} 
+0

你需要的組件你意識到之前添加到容器(即使其可見)。 – mre

+0

或者調用'JFrame#revalidate','JFrame#repaint' - 但是mre的建議更好 – MadProgrammer

+0

1)不要設置頂級容器的大小。而是佈置內容並調用'pack()'。 2)請學習常見的[Java命名約定](http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307)(具體用於名稱的情況) ,方法和屬性名稱並一致使用它們。 3)將catch(Exception e){..']形式的代碼更改爲catch(Exception e){e.printStackTrace(); //非常翔實! ..' –

回答

0

你必須添加components它之後調用setVisible

JFrame f = new JFrame(); 

//set properties 

//add other components  


f.setVisible(true); //finally 
+0

對不起,我有限的知識。我剛開始學習Java 2個小時。我不太清楚你說的是什麼。任何人都可以修復我的代碼?請。多謝你們 –

1
String Ho = rs.getString("Ho"); 

超越System.out.println();這些值被丟棄,對JLabel

Ho = new JLabel("Ho"); 
  1. 沒有效果,請不要設置頂層容器的大小。相反佈置內容&致電pack()
  2. 應該在EDT上啓動和更新Swing GUI。
  3. 請學習常用的Java naming conventions(具體用於名稱的情況)爲類,方法&屬性名稱&一致使用。
  4. 爲了更好地爲您提供幫助,請發送SSCCE。形式的
  5. 更改代碼:

catch (Exception e) { 
    .. 

到:

catch (Exception e) { 
    e.printStackTrace(); // very informative! ..