![]() |
JAVA: onChange()-Methode für JComboBox
habe auf meinem Formular u.a. zwei JComboBoxes:
JComboBox 1: Hauptkategorien JComboBox 2: Subkategorien nun soll, sobald in der Hauptkategorie-Box ein anderer Eintrag ausgewählt wurde, die neuen Subkategorien für diese Hauptkategorie geladen werden. ich habs mit dem Event: itemStateChanged() probiert: beim laden der Hauptkategorien aus der Datenbank, bekommen ich jedesmal eine SQLException (Operation not allowed after ResultSet closed). und es wird nur die erste Hauptkategorie geladen. Wenn ich aber dieses Event deactiviere funktioniert das Laden der Hauptkategorien wieder einwandfrei. wie kann ich diese problem lösen, bzw. gibt es ein anderes/besseres Event für mein problem? |
Re: JAVA: onChange()-Methode für JComboBox
Zitat:
Wenn du dies machst (nach abrufen, vor close), so solltest du mit diesen Daten auch in einem beliebigen Ereignis arbeiten können, ohne das irgendein Problem auftritt. An sich ist es (imho) der Weg, den man wählen sollte, da die Auswertung der Daten des ResultSets durchaus länger dauern kann, während du sicherlich nicht unnötig lange eine Connection zur DB belegen möchtest. Gruß Der Unwissende |
Re: JAVA: onChange()-Methode für JComboBox
habe hier wieder die Exception "operation not allowed after ResultSet closed" beim zweiten aufruf des result.next()
Delphi-Quellcode:
warum??????????
try
{ rezepte.removeAllElements(); //löscht alle bisherigen Rezepte aus den RezepteModel(TableModel) String sql = "SELECT * FROM rezept"; ResultSet result = db.onSelect(sql); while(result.next()) { rezepte.addRezept(new Rezept(result.getInt("RID"), db)); } } catch (Exception e) { String message = "Es konnten nicht alle bzw. keine Rezepte geladen werden!!"; JOptionPane.showMessageDialog(this,message,"FEHLER",JOptionPane.ERROR_MESSAGE); System.out.println("loadRezepteERROR - "+e.toString()); } |
Re: JAVA: onChange()-Methode für JComboBox
Wo findet denn die Verbindung zur Datenbank statt?
|
Re: JAVA: onChange()-Methode für JComboBox
Delphi-Quellcode:
hab dir gleich den ganzen code gegeben
import java.sql.*;
import javax.swing.*; public class KochrezepteFrame extends javax.swing.JFrame { private RezepteModel rezepte; private DatenbankConnector db; public KochrezepteFrame() { initComponents(); try { this.db = new DatenbankConnector(); //HIER WIRD DIE VERBINDUNG ZUR DATENBANK HERGESTELLT } catch (Exception e) { String message = "Es konnte keine Verbindung zur Datenbank hergestellt werden!"; JOptionPane.showMessageDialog(this,message,"FEHLER",JOptionPane.ERROR_MESSAGE); System.out.println(e.toString()); } rezepte= new RezepteModel(db); taRezepte.setModel(rezepte); loadRezepte(); // HIER wird die funktion loadRezepte aufgerufen } private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); taRezepte = new javax.swing.JTable(); jPanel1 = new javax.swing.JPanel(); jMenuBar2 = new javax.swing.JMenuBar(); jMenu2 = new javax.swing.JMenu(); miHinzufuegen = new javax.swing.JMenuItem(); miAendern = new javax.swing.JMenuItem(); miLoeschen = new javax.swing.JMenuItem(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); taRezepte.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } )); jScrollPane1.setViewportView(taRezepte); getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER); getContentPane().add(jPanel1, java.awt.BorderLayout.SOUTH); jMenu2.setText("Rezept"); miHinzufuegen.setText("Hinzuf\u00fcgen"); miHinzufuegen.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { onHinzufuegen(evt); } }); jMenu2.add(miHinzufuegen); miAendern.setText("Bearbeiten"); jMenu2.add(miAendern); miLoeschen.setText("L\u00f6schen"); jMenu2.add(miLoeschen); jMenuBar2.add(jMenu2); setJMenuBar(jMenuBar2); pack(); } private void onHinzufuegen(java.awt.event.ActionEvent evt) { RezeptDialog dlg = new RezeptDialog(this,true, db); dlg.setBounds(250, 50, 540, 780); dlg.pack(); openDialog(dlg); } public void openDialog(RezeptDialog dlg) { dlg.setVisible(true); dlg.pack(); if(dlg.eingabeOK()) { loadRezepte(); } else if(dlg.shouldReOpen()) openDialog(dlg); } public void loadRezepte() { try { rezepte.removeAllElements(); String sql = "SELECT * FROM rezept"; ResultSet result = db.onSelect(sql); while(result.next()) //HIER wird beim zweiten aufruf der funktion next() die SQLException ausgelöst { rezepte.addRezept(new Rezept(result.getInt("RID"), db)); } } catch (Exception e) { String message = "Es konnten nicht alle bzw. keine Rezepte geladen werden!!"; JOptionPane.showMessageDialog(this,message,"FEHLER",JOptionPane.ERROR_MESSAGE); System.out.println("loadRezepteERROR - "+e.toString()); } } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new KochrezepteFrame().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JMenu jMenu2; private javax.swing.JMenuBar jMenuBar2; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JMenuItem miAendern; private javax.swing.JMenuItem miHinzufuegen; private javax.swing.JMenuItem miLoeschen; private javax.swing.JTable taRezepte; // End of variables declaration } hilf mir bitte!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz