2012-03-02 2 views
0

Я просто новичок в Java, и я был бы рад, если бы вы могли мне помочь, у меня здесь JTable, который заполняется с помощью JButton с данными из базы данных. У меня есть 3 стола с именем Студенты, преподаватели, & директора. Все работает отлично, просматривая эти поля в JTable, используя 3 JButtons (по одному для каждой таблицы). Но каждый раз, когда я нажимал на другой JButton, JTable не очищался, а вместо этого добавлял данные к существующей информации на JTable.Заполните JTable с помощью JComboBox вместо JButton

Теперь, я хочу, чтобы заменить 3 JButtons на JComboBox, где параметры для выбора - это имена таблиц и отображение их содержимого в JTable. Я действительно не знаю, как это сделать. Надеюсь, вы сможете помочь мне с этим и по достоинству оцените любые входы.

Thanks

Ниже приведены коды, которые я использовал. Я также включил некоторые подписи.

import java.sql.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.DefaultComboBoxModel; 
import javax.swing.table.DefaultTableModel; 

public class tests extends javax.swing.JFrame { 

/** 
* Creates new form tests 
*/ 
public tests() { 
    initComponents(); 
} 

@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code"> 
private void initComponents() { 

    jScrollPane1 = new javax.swing.JScrollPane(); 
    dataTable = new javax.swing.JTable(); 
    students = new javax.swing.JButton(); 
    teachers = new javax.swing.JButton(); 
    directors = new javax.swing.JButton(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    dataTable.setModel(new javax.swing.table.DefaultTableModel(
     new Object [][] { 

     }, 
     new String [] { 
      "ID", "Name", "Surname", "Age" 
     } 
    )); 
    jScrollPane1.setViewportView(dataTable); 

    students.setText("Students"); 
    students.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      studentsActionPerformed(evt); 
     } 
    }); 

    teachers.setText("Teachers"); 
    teachers.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      teachersActionPerformed(evt); 
     } 
    }); 

    directors.setText("Directors"); 
    directors.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      directorsActionPerformed(evt); 
     } 
    }); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(students) 
      .addGap(57, 57, 57) 
      .addComponent(teachers) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 66, Short.MAX_VALUE) 
      .addComponent(directors) 
      .addGap(40, 40, 40)) 
     .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(students) 
       .addComponent(teachers) 
       .addComponent(directors)) 
      .addGap(18, 18, 18) 
      .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE)) 
    ); 

    pack(); 
}// </editor-fold> 

private void studentsActionPerformed(java.awt.event.ActionEvent evt) { 
    DefaultTableModel model = (DefaultTableModel) dataTable.getModel(); 
    String sql = "select * from students"; 
    try { 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException ex) { 
      Logger.getLogger(tests.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     Connection connect = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/datavisibility","root",""); 
     Statement statmnt = connect.createStatement(); 
     ResultSet rslt = statmnt.executeQuery(sql); 
     while(rslt.next()){ 
      String id = rslt.getString("ID"); 
      String name = rslt.getString("Name"); 
      String surname = rslt.getString("Surname"); 
      String age = rslt.getString("Age"); 
      model.addRow(new Object[]{id,name,surname,age}); 
     } 
    } catch(SQLException e){ 
     e.printStackTrace(); 
    } 
} 

private void teachersActionPerformed(java.awt.event.ActionEvent evt) { 
    DefaultTableModel model = (DefaultTableModel) dataTable.getModel(); 
    String sql = "select * from teachers"; 
    try { 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException ex) { 
      Logger.getLogger(tests.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     Connection connect = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/datavisibility","root",""); 
     Statement statmnt = connect.createStatement(); 
     ResultSet rslt = statmnt.executeQuery(sql); 
     while(rslt.next()){ 
      String id = rslt.getString("ID"); 
      String name = rslt.getString("Name"); 
      String surname = rslt.getString("Surname"); 
      String age = rslt.getString("Age"); 
      model.addRow(new Object[]{id,name,surname,age}); 
     } 
    } catch(SQLException e){ 
     e.printStackTrace(); 
    } 
} 

private void directorsActionPerformed(java.awt.event.ActionEvent evt) { 
    DefaultTableModel model = (DefaultTableModel) dataTable.getModel(); 
    String sql = "select * from directors"; 
    try { 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException ex) { 
      Logger.getLogger(tests.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     Connection connect = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/datavisibility","root",""); 
     Statement statmnt = connect.createStatement(); 
     ResultSet rslt = statmnt.executeQuery(sql); 
     while(rslt.next()){ 
      String id = rslt.getString("ID"); 
      String name = rslt.getString("Name"); 
      String surname = rslt.getString("Surname"); 
      String age = rslt.getString("Age"); 
      model.addRow(new Object[]{id,name,surname,age}); 
     } 
    } catch(SQLException e){ 
     e.printStackTrace(); 
    } 
} 

/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 
    /* 
    * Set the Nimbus look and feel 
    */ 
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
    /* 
    * If Nimbus (introduced in Java SE 6) is not available, stay with the 
    * default look and feel. For details see 
    * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
    */ 
    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(tests.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(tests.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(tests.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(tests.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 
    //</editor-fold> 

    /* 
    * Create and display the form 
    */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 

     public void run() { 
      new tests().setVisible(true); 
     } 
    }); 
} 
// Variables declaration - do not modify 
private javax.swing.JTable dataTable; 
private javax.swing.JButton directors; 
private javax.swing.JScrollPane jScrollPane1; 
private javax.swing.JButton students; 
private javax.swing.JButton teachers; 
// End of variables declaration 
} 

См подрисуночной here.

Спасибо заранее.

+3

'Но каждый раз, когда я нажимал на другой JButton, th e JTable не очищается, а вместо этого добавляет данные в существующую информацию о JTable.' - это не должно вас удивлять, поскольку программа выполняет только то, что вы говорите. ActionListener вашей кнопки только добавляет строки в таблицу. Я уверен, что вы можете понять, что для замены данных сначала нужно удалить старые данные или заменить модель на новую, не так ли? API DefaultTableModel имеет методы, которые вы можете использовать для этого. –

+1

Кроме того, я не вижу вашего кода для вашей попытки сделать то, что вы хотите, с помощью JComboBox. Если вы забыли опубликовать код, отредактируйте свой вопрос и опубликуйте его, иначе мы не будем знать, что вы делаете неправильно. –

+0

@HovercraftFullOfEels: Сэр, пожалуйста, советую, я полностью потерял это. Я просто новичок в Java, поэтому, пожалуйста, помогите мне. Спасибо! – Karl

ответ

1

Просто добавьте JComboBox вместо JButtons, как это,

String[] items = {"students", "teachers", "directors"}; 
JComboBox cb = new JComboBox(items); 
cb.setEditable(true); 

Добавить класс Приёмник COMBOBOX как это,

ActionListener actionListener = new ActionListener() { 
    public void actionPerformed(ActionEvent actionEvent) { 
    //System.out.println("Selected: " + cb.getSelectedItem()); 
    if(cb.getSelectedItem() == "student"){ 

     //Perform the action for student 

    } 

     //Repeat this for all items 

    } 
}; 
cb.addActionListener(actionListener); 

Это сделает то, что вы ожидаете ....

+0

'private void comBoxActionPerformed (java.awt.event.ActionEvent evt) { DefaultTableModel model = (DefaultTableModel) dataTable.getModel(); Строка sql = "SELECT * FROM students"; Connection connect = (Connection) DriverManager.getConnection ("jdbc: mysql: // localhost: 3306/datavisibility", "root", ""); Заявление statmnt = connect.createStatement(); ResultSet rslt = statmnt.executeQuery (sql); ' -> Я до сих пор не могу получить данные из своей базы данных с помощью JComboBox , что, по-вашему, неправильно с моим кодом? Спасибо! – Karl

+0

Вы проверили actionListener работает для вашего события изменения combobox? – Vinesh

+0

Да, я уже это сделал. На самом деле, не очень уверен в этом. Что вы думаете: отсутствует? 'частная пустота comBoxActionPerformed (java.awt.event.ActionEvent ЭВТ) { если (comBox.getSelectedItem() == "Студенты") { JComboBox COMBOX = (JComboBox) evt.getSource(); String select = (String) comBox.getSelectedItem(); } '} Большое спасибо – Karl

0

Все, что вам нужно сделать, это добавить ActionListener для JCombobox. В actionListener измените данные в таблице на основе значения, возвращаемого getSelectedItem().

Попробуйте записать его и разместить свой код, если вам нужна дополнительная помощь

+0

Я действительно не понимаю, что вы подразумеваете под «добавлением» ActionListener, так как я просто новичок в этом. Может быть, если вы можете дать образец, я могу это понять. Большое спасибо. – Karl

+0

То, что я имею в виду под «добавлением», говорит Винеш в своем посте. –

+0

Да, спасибо, что сэр. Я уже решил проблему JComboBox, теперь проблема заключается в том, как отображать только данные определенной базы данных при выборе из JComboBox и не добавлять к существующим данным JTable. Пожалуйста, см. Подписи [здесь] (https://skydrive.live.com/redir.aspx?cid=eb81d7d0042dfe6b&resid=EB81D7D0042DFE6B!165&parid=EB81D7D0042DFE6B!158&authkey=!AP4pPOBcvfh0XLU), если вы сбиты с толку. Большое спасибо! – Karl