AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein JAVA: onChange()-Methode für JComboBox
Thema durchsuchen
Ansicht
Themen-Optionen

JAVA: onChange()-Methode für JComboBox

Ein Thema von geisi · begonnen am 29. Dez 2005 · letzter Beitrag vom 29. Dez 2005
Antwort Antwort
geisi

Registriert seit: 19. Sep 2003
449 Beiträge
 
Delphi 6 Professional
 
#1

JAVA: onChange()-Methode für JComboBox

  Alt 29. Dez 2005, 13:34
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?
mfg geisi
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: JAVA: onChange()-Methode für JComboBox

  Alt 29. Dez 2005, 16:29
Zitat von geisi:
beim laden der Hauptkategorien aus der Datenbank, bekommen ich jedesmal eine SQLException (Operation not allowed after ResultSet closed)
Also was dieses Problem betrifft, so ist die Lösung recht einfach. Du greifst ja in mehreren Schritten auf die DB zu. Du musst eine Connection etablieren, eine Anfrage schicken, erhälst ein ResultSet und schließt die Verbindung wieder. Die Daten im ResultSet sind allerdings nur gültig, solange die Verbindung zur DB aktiv ist. Damit dies nicht unnötig lange der Fall ist, musst du einfach die Daten aus dem ResultSet kopieren, die von dir weiterverarbeitet werden.
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
  Mit Zitat antworten Zitat
geisi

Registriert seit: 19. Sep 2003
449 Beiträge
 
Delphi 6 Professional
 
#3

Re: JAVA: onChange()-Methode für JComboBox

  Alt 29. Dez 2005, 20:04
habe hier wieder die Exception "operation not allowed after ResultSet closed" beim zweiten aufruf des result.next()
Delphi-Quellcode:
        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());
        }
warum??????????
mfg geisi
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: JAVA: onChange()-Methode für JComboBox

  Alt 29. Dez 2005, 20:14
Wo findet denn die Verbindung zur Datenbank statt?
  Mit Zitat antworten Zitat
geisi

Registriert seit: 19. Sep 2003
449 Beiträge
 
Delphi 6 Professional
 
#5

Re: JAVA: onChange()-Methode für JComboBox

  Alt 29. Dez 2005, 20:28
Delphi-Quellcode:
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
    
}
hab dir gleich den ganzen code gegeben

hilf mir bitte!!
mfg geisi
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz