2015-10-24 67 views
-2

當我寫入數據庫時​​,我正在尋找數據庫中的名稱JTextField,我想按enter鍵顯示所有相應的名稱。不幸的是我無法做到,有人可以幫助我。Jtextfield在數據庫msql中使用keylistener進行搜索

public class Rechercher extends JFrame{ 

    private JLabel rechercher; 
    private JTextField trechercher; 
    private JButton executer; 
    private JButton exit; 
    static Connection connection; 
    Vector titrecolonnes = new Vector(); 
    Vector donnee = new Vector(); 
    private JTable table; 
    private TableRowSorter<TableModel> sorter; 

    public Rechercher() 
    { 
     initComponents(); 
    } 

    public void initComponents() 
    { 
     setLayout(null); 

     trechercher = new JTextField(""); 
     add(trechercher); 
     trechercher.setBounds(140, 30, 235,35); 
     executer = new JButton("Rechercher :"); 
     add(executer); 
     executer.setBounds(10, 34, 115,25); 
     try 
     { 
      Class.forName("com.mysql.jdbc.Driver"); 
      System.out.println("com.mysql.jdbc.Driver found"); 
      connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/eva","root",""); 
      System.out.println("Connexion Ok"); 
     }catch(Exception cnfe) 
     { 
       System.out.println("Error:"+cnfe.getMessage()); 
       } 

     //-----actionner textfield 
       trechercher.addMouseListener(new MouseAdapter() 
       { 
        public void mousePressed(MouseEvent e){ 

         trechercher.setText(""); 

       } 

       }); 

     //------Connection à la base de donneés 
     trechercher.addKeyListener(new KeyAdapter() 
     { 
      public void keyPressed(KeyEvent e) { 

       try{ 

         // Read data from a table 
         String sql = "SELECT * FROM impaye"; 
         Statement stmt = connection.createStatement(); 
         ResultSet rs = stmt.executeQuery(sql); 
         ResultSetMetaData md = rs.getMetaData(); 
         int columns = md.getColumnCount(); 

         // Get column names 
         for (int i = 1; i <= columns; i++) 
         { 
          titrecolonnes.addElement(md.getColumnName(i)); 
         } 

         // Get row data 
         while (rs.next()) 
         { 
          Vector row = new Vector(columns); 
          for (int i = 1; i <= columns; i++) 
          { 
          row.addElement(rs.getObject(i)); 
          } 
          donnee.addElement(row); 
         } 
         rs.close(); 
         stmt.close(); 
       }catch(Exception cnfe) 
       { 
        System.out.println("Error:"+cnfe.getMessage()); 
        } 

       TableModel model = new DefaultTableModel (donnee, titrecolonnes) 
       { 
       public Class getColumnClass(int columnNames) { 
        Class returnValue; 
        if ((columnNames >= 0) && (columnNames < getColumnCount())) { 
         returnValue = getValueAt(0, columnNames).getClass(); 
        } else { 
         returnValue = Object.class; 
        } 
        return returnValue; 
        } 
       }; 
       table = new JTable (model) ; 
       sorter = new TableRowSorter<TableModel>(model) ; 
       JScrollPane scrollPane = new JScrollPane((table)); 
       table.setRowSorter (sorter) ; 
       getContentPane().setLayout(new GridLayout(1,1)); 
       getContentPane().add(scrollPane); 

      } 
     }); 


    } 


} 
+0

嗨@Recay,歡迎計算器!你的問題並不完全清楚。您是否試圖根據當前的用戶輸入提供來自數據庫的搜索建議? –

回答

1
trechercher.addKeyListener(new KeyAdapter() 

不要使用KeyListener的。

A JTextField被設計爲與ActionListener一起使用來處理Enter鍵。

table = new JTable (model) ; 
sorter = new TableRowSorter<TableModel>(model) ;  
JScrollPane scrollPane = new JScrollPane((table)); 
table.setRowSorter (sorter) ; 
getContentPane().setLayout(new GridLayout(1,1)); 
getContentPane().add(scrollPane); 

上述代碼正在創建添加到GUI的新組件。問題是所有的組件都會有(0,0)的大小,所以沒有什麼可以繪製的。當您動態組件添加到一個可見的圖形用戶界面,則基本代碼:

panel.add(...); 
panel.revalidate(); // invokes the layout manager 
panel.repaint(); // repaints the components 

然而一個更簡單的解決方案是空表和滾動面板添加到架在類的構造函數。然後,當您獲取新數據時,只需刷新表格的TableModel,表格就會重新繪製自己。

然後,所有你需要在你的刷新方法做的是:

table.setModel(model); 
相關問題