2013-06-22 3 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 (Исключение e) {..' to' catch (Исключение e) {e.printStackTrace(); // очень информативно! ..' –

ответ

0

Вы должны вызвать setVisible после добавления components к нему.

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. Swing GUI следует запускать и обновлять на EDT.
  3. Пожалуйста, изучите общие Java naming conventions (в частности, используемый для имен) для класса, метод & имена атрибутов & используйте их последовательно.
  4. Чтобы лучше помочь, отправьте сообщение SSCCE.
  5. Изменить код формы:

catch (Exception e) { 
    .. 

к:

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