2016-07-09 9 views
-1

Ich möchte das Kombinationsfeld mit dem Wert aus der Datenbank basierend auf der Auswahl der Tabellenzeile auffüllen, es funktioniert, aber nur, wenn ich die andere Zelle auswählen Wählen Sie dann die gewünschte Kombinationsfeldzelle aus. Aber wenn ich die Combobox-Zelle einer anderen Zeile anwähle, werden vorherige Elemente angezeigt, und nachdem ich eine davon ausgewählt habe, werde ich, wenn ich erneut auf die Combobox klicke, neue Werte eingeben. Ich möchte, dass die neuen Werte aufgefüllt werden, wenn ich auf eine Zeile oder sogar auf eine Kombinationsfeldzelle klicke. Bitte helfen Sie. Der Code ist unten angegeben: -Füllen Combobox der Tabelle Zelle mit unterschiedlichen Wert basierend auf der Auswahl der Tabellenzeile in Java

String columnName[] = { "Date","Voucher ID","Voucher No","Amount","VOUCHER_NARRATION","Exp. Head" }; 
String dataValues[][] = {}; 
voucherTable=new JTable(dataValues,columnName); 
voucherTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
ListSelectionModel list=voucherTable.getSelectionModel(); 
voucherTable.setSelectionModel(list); 
list.addListSelectionListener(new ListSelectionListener(){ 
    public void valueChanged(ListSelectionEvent lt) { 
     try { 
      voucherid=voucherTable.getValueAt(voucherTable.getSelectedRow(),1).toString(); 
      System.out.println(voucherid); 
      comboBox.removeAllItems(); 
      TableColumn road=voucherTable.getColumnModel().getColumn(5); 
      voucherTable.getColumnModel().getColumn(5).setCellEditor(new DefaultCellEditor(new VoucherUpdate().getExpHead(voucherid))); 
     } catch(Exception h) { 
      System.err.println(h); 
      return; 
     } 
    } 
}); 

public JComboBox getExpHead(String vid) { 
    String voucherId=vid; 
    try { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     Connection conn=DriverManager.getConnection("jdbc:odbc:SARALIFMS","SARALIFMS","O391120SUMAN"); 
     Statement st=conn.createStatement(); 
     ResultSet rs=st.executeQuery("SELECT E.EXP_ID,EXP_HEAD FROM TD_VOUCHER_SUMAN D, MM_PRIA_EXPENDITURE E" 
     +" WHERE VOUCHER_ID='"+voucherId+"' AND D.ACCOUNT_CODE=E.ACCOUNT_CODE"); 
     while(rs.next()) { 
      String expHead=rs.getString("EXP_HEAD"); 
      comboBox.addItem(expHead); 
     } 
     conn.close(); 
    } catch(Exception e) { 
     System.out.println(e); 
    } 
    return comboBox; 
} 
+1

Für die beste Hilfe, erstellen und veröffentlichen Sie ein [mcve], ein sehr kleines Programm, das kompiliert und läuft und zeigt uns Ihr Problem. Es sollte eine vereinfachte Extraktion Ihres aktuellen Programms sein, sollte keinen Datenbankcode enthalten, sollte wieder so einfach wie möglich sein und dennoch für uns lauffähig sein, ohne dass wir es ändern müssen. Ja, das verlangt Arbeit von Ihnen, aber wenn Sie das tun, werden wir schnell und einfach in der Lage sein, Ihr Problem zu verstehen und Ihnen so helfen zu können. –

+1

Wenn es sich bei Ihrer Frage nicht um ein Duplikat handelt, bearbeiten Sie Ihre Frage so, dass sie eine [mcve] enthält, die angibt, wie Sie versucht haben, den angezeigten Ansatz zu verwenden. – trashgod

+0

Diese Frage wurde ursprünglich als Duplikat geschlossen von: [Wie bekomme ich die CellRow, wenn sich ein ItemEvent in der JComboBox innerhalb der Zelle befindet] (http://stackoverflow.com/q/7350445/131872). Bei dieser Frage wird Code aufgerufen, wenn sich die Zeilenauswahl einer Tabelle ändert. Ich glaube nicht, dass es ein Duplikat ist, also habe ich die Frage erneut eröffnet. – camickr

Antwort

1

es funktioniert, aber nur, wenn ich die andere Zelle der Zeile und wählen Sie dann erforderlich Kombinationsfeld Zelle

Wenn Sie auf eine Zelle klicken wählen mit ein Kombinationsfeld als Editor, wird der Editor aufgerufen, BEVOR die ausgewählte Zeile aktualisiert wurde. Das ist also ein Zeitproblem.

Eine Lösung besteht darin, die getCellEditor(...)-Methode von JTable zu überschreiben, um die Daten zu laden, wenn der Editor tatsächlich aufgerufen wird. Zu diesem Zeitpunkt wird die ausgewählte Zeile aktualisiert und Sie können die Daten für die entsprechende Zeile abrufen.

Dieser Ansatz ist in dieser Frage gezeigt: https://stackoverflow.com/a/4211552/131872

Hinweis Sie das Zwischenspeichern der Daten betrachten möchten, so dass Sie Sie die Zelle bearbeiten Sie jedes Mal eine SQL-Zugriff nicht tun.