2017-02-24 1 views
-1

私はeclipseでswingを使ってjavaのライブラリ管理に関するプロジェクトを行っています。ログインボタンをクリックしても何も起こりません。 mysql jdbcドライバがロードされ、接続が取得されていますが、ラベルは表示されません。何をすべきか教えてください。ここに私のコードです。JFrameログインフォームの操作方法は?

import java.awt.*; 
    import javax.swing.*; 
    import java.awt.event.*; 
    import java.sql.*; 
    public class Loginscreen implements ActionListener { 

    JFrame logframe; 
    JButton bt; 
    JLabel lid, lpass, lmsg; 
    JTextField tid; 
    JPasswordField pass; 
    JPanel p1; 
    Font ft, ft2; 
    Connection conn; 

    public Loginscreen() { 

     logframe = new JFrame("Login"); 
     logframe.setSize(1366, 720); 
     logframe.setVisible(true); 
     lid = new JLabel("User ID"); 
     lpass = new JLabel("Password"); 
     lmsg = new JLabel(); 
     ft = new Font("Arial", Font.BOLD, 30); 
     ft2 = new Font("Arial", Font.PLAIN, 20); 
     tid = new JTextField(); 
     pass = new JPasswordField(); 
     p1 = new JPanel(); 
     bt = new JButton("Login"); 
     logframe.add(p1); 
     p1.setLayout(null); 
     p1.setBackground(new Color(160, 82, 45));//Background Color Set 
     lid.setBounds(450, 200, 500, 30); 
     p1.add(lid); 
     lid.setFont(ft); 
     tid.setBounds(650, 200, 200, 30); 
     p1.add(tid); 
     tid.setFont(ft2); 
     lpass.setBounds(450, 300, 500, 30); 
     p1.add(lpass); 
     lpass.setFont(ft); 
     pass.setBounds(650, 300, 200, 30); 
     p1.add(pass); 
     bt.setBounds(600, 430, 100, 50); 
     p1.add(bt); 
     bt.setFont(new Font("Segoe Script", Font.BOLD, 22)); 
     bt.setBackground(new Color(173, 216, 230)); 
     lmsg.setBounds(450, 510, 500, 30); 
     p1.add(lmsg); 
     bt.addActionListener(this); 

    } 

    public void actionPerformed(ActionEvent ae) { 
     if (ae.getSource() == bt) { 
      try { 
       Class.forName("com.mysql.jdbc.Driver"); 
       conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_lib", "root", "admin"); 
       String i = tid.getText();//get the user id 
       char[] pwd = pass.getPassword();//get the password 
       String spwd = new String(pwd);//converting char to string 
       String query = "select * from tbl_user where id=? and password=?"; 
       PreparedStatement p = conn.prepareStatement(query); 
       p.setString(1, i); 
       p.setString(2, spwd); 
       ResultSet rs = p.executeQuery(); 
       int count = 0; 
       while (rs.next()) { 
        count = count + 1; 
       } 
       if (count == 1) { 
        lmsg.setText("Invalid User ID or Password"); 
       } else { 
        lmsg.setText("Invalid User ID or Password"); 
       } 
       rs.close(); 
       conn.close(); 
      } catch (Exception e) { 
       System.out.println(e); 
      } 
     } 
    } 
} 
+0

すべてのコンポーネントを追加するまで、フレームを表示しないでください。 – Berger

+0

'spwd'と' i'を印刷できますか? –

+0

私のプログラムはうまく動作します –

答えて

0

私はあなたが成功したときにテキストを設定しないと思います。

もわから

while(rs.next()) 
{ 
count=count+1; 
} 

終了を作ります。 また、SQLインジェクションに対してクエリをセキュリティで保護してください(これを実現したばかりです)

このような種類のデバッグの問題については、UnitTesting(基本的にプログラムがどれだけ遠くにあるかテストします。また

あなたが質問を投稿する前に、それは恐ろしい見えます...コメントを追加し、適切GUI-ものをフォーマットするために私たちに好意をん:/

EDIT:

if(count==1) 
     { 
      lmsg.setText("Invalid User ID or Password"); 
     } 
     else 
     { 
      lmsg.setText("Invalid User ID or Password"); 
     } 

は意味がありません私には...何が起こってもエラーが返ってくる