2013-06-22 134 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! ..