2012-03-02 2 views
0

저는 자바 초보자입니다. JButton을 사용하여 데이터베이스의 데이터로 채워진 JTable을 보게되어 기쁩니다. 나는 학생 세 테이블을 가지고, 교사, & 감독은입니다. 3 개의 JButton (각 테이블마다 1 개)을 사용하여 JTable의 필드를 보는 데 모든 것이 잘 작동합니다. 그러나 다른 JButton을 클릭 할 때마다 JTable은 지워지지 않고 대신 JTable의 기존 정보에 데이터를 추가합니다.JButton 대신 JComboBox를 사용하여 JTable 채우기

이제 3 JButton을 JComboBox로 대체하여 선택하는 옵션이 테이블 이름이고 해당 내용을 JTable에 표시하려고합니다. 나는 이것을 어떻게하는지에 대해 전혀 모른다. 이 정보로 도움을 주시고 모든 의견을 정말로 기분 좋게 보내 주시기 바랍니다.

감사합니다.

다음은 내가 사용하는 코드입니다. 나는 또한 몇몇 자막을 포함했다.

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 JTable은 지워지지 않고 대신 JTable의 기존 정보에 데이터를 추가합니다. '- 프로그램이 당신이하는 일을하고 있기 때문에 놀랄 일이 아닙니다. 버튼의 ActionListener는 테이블 모델의 행만 추가합니다. 데이터를 바꾸려면 먼저 기존 데이터를 제거하거나 모델을 새로운 것으로 바꾸어야한다는 것을 알 수있을 것입니다. 맞습니까? DefaultTableModel API에는이를 위해 사용할 수있는 메서드가 있습니다. –

+1

또한 JComboBox로 원하는대로 할 수있는 코드가 표시되지 않습니다. 코드를 게시하는 것을 잊어 버린 경우 질문을 수정하여 게시하십시오. 그렇지 않으면 잘못된 내용을 알 수 없습니다. –

+0

@HovercraftFullOfEels : 선생님, 제발,이 일로 완전히 길을 잃었습니다. 나는 Java에 익숙하지 않으므로 나를 도와주세요. 감사합니다. – Karl

답변

1

그냥 대신이 같은 JButton의의 JComboBox에 추가 도움이 필요하면 코드를 게시

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 모델 = (DefaultTableModel) dataTable.getModel(); String sql = "SELECT * FROM students"; 연결 connect = (연결) DriverManager.getConnection ("jdbc : mysql : // localhost : 3306/datavisibility", "root", ""); Statement statmnt = connect.createStatement(); ResultSet rslt = statmnt.executeQuery(); -> 여전히 JComboBox를 사용하여 데이터베이스에서 데이터를 검색 할 수 없습니다. 내 코드에 어떤 문제가 있다고 생각합니까? 감사합니다. – Karl

+0

combobox 변경 이벤트에 대해 actionListener가 작동하는지 테스트 해 보셨습니까? – Vinesh

+0

예, 이미 해봤습니다. 실제로 그것에 대해 그렇게 확신하지는 않습니다. 누락 된 부분이 있습니까? '개인 무효 comBoxActionPerformed (java.awt.event.ActionEvent의의 EVT) { 경우 (comBox.getSelectedItem() == "학생") { JComboBox에 comBox = (JComboBox에) evt.getSource(); String select = (String) comBox.getSelectedItem(); }' 고마워요. – Karl

0

JCombobox 용 ActionListener를 추가하기 만하면됩니다. actionListener에서 getSelectedItem()에 의해 반환 된 값을 기반으로 테이블의 데이터를 변경합니다.

,

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

이 같은 콤보하는 리스너 클래스를 추가, 그것을 쓰는 시도하고 당신이

+0

ActionListener를 처음 추가 한 이래로 ActionListener를 '추가'한다는 의미는 아닙니다. 어쩌면 샘플을 줄 수 있다면 이해할 수있을 것입니다. 고맙습니다. – Karl

+0

내가 '추가'하는 것은 Vinesh가 자신의 게시물에서 말한 것입니다. –

+0

네, 고마워요. 난 이미 JComboBox에 관한 문제를 해결했습니다. 제 문제는 JComboBox에서 선택하고 JTable의 기존 데이터를 추가하지 않을 때 특정 데이터베이스의 데이터 만 표시하는 방법입니다. 혼란 스러울 경우 [여기] (https://skydrive.live.com/redir.aspx?cid=eb81d7d0042dfe6b&resid=EB81D7D0042DFE6B!165&parid=EB81D7D0042DFE6B!158&authkey=!AP4pPOBcvfh0XLU)의 캡션을 참조하십시오. 감사합니다. – Karl

관련 문제