Gui Komponenten aus anderer .java Datei im Projekt ändern

javad

Grünschnabel
Ich habe eine Datenbank-Anwendung und verteile den Code in mehrere .java Dateien.

Beispiel:
Methode B in Datei Modul.java fügt Combobox A in Gui.java ein Item hinzu.
Das Item ist nicht sichtbar, aber vorhanden in Combo A (getestet mit getItemIndex)

Ist Methode B in Gui.java, geht es.
Das Item ist sichtbar.
Genauso ist es mit Jtable und anderen Komponenten.

Das kann ja nicht der Sinn von Java sein. Mein Code funktioniert. Hab jetzt wirklich viel ausprobiert (Instanziierung, extends Gui etc)

Wenn Ihr nicht Bescheid wisst, gebt mir einen Tip zur Erstellung größerer Projekte.
Auch in Englisch....

PS an der Admin hier: Mußte den Beitrag jetzt 2 mal schreiben, weil die Session abgelaufen war. Setzt das mal auf eine Stunde.

GRUß
 
flashray hat gesagt.:
Poste mal ein wenig Code.

Diese Methode aus Datei frmMain.java
Code:
    /* Button - Kalender */
    public void jButCal_actionPerformed(ActionEvent e) {
        FillCombo fc = new FillCombo();             // Instanz zu FillCombo.java
        fc.FillCombo();                                      // erwartet Array data
        System.out.println(data);                       // Test: Ausgabe ist null 
    }

ruft FillCombo.java auf und erwartet per return das Array data (um eine Combobox zu füllen)


FillCombo.java:
Code:
import java.util.Calendar;
import java.sql.*;

public class FillCombo extends frmMain {

 public String[] FillCombo() {
dbConnection();                     // Verbindung zur Datenbank 
query();                                // gibt strmonate aus (SQL-Abfrage aller Monate)

String data[] = new String;
         try {
             stmt = conn.createStatement();
             ResultSet rsmonate = stmt.executeQuery(strmonate);           
             Calendar calendar = Calendar.getInstance();
             int i = 0;
             while (rsmonate.next()) {                 
                 Date monat = rsmonate.getDate("monat");
                 calendar.setTime(monat);
                 int aktmonat = calendar.get(Calendar.MONTH);
                 aktmonat = aktmonat + 1;
                 int aktyear = calendar.get(Calendar.YEAR);
                 if (i <= 9) {
                     data = aktmonat + "/" + aktyear;
                 }                 
                 i = i + 1;
             }
         }         
         catch (SQLException ex) {
             System.out.println(ex.toString());
         }
     }
     System.out.println(data);                    // funktioniert: data ist nicht null
     return data;
 }
}



Das Array data existiert also, wird aber nicht übergeben.
Wenn ich das Array an eine Methode in frmMain.java übergebe, z. B. sendArray(data),
kommt es an. Da das ja dazu gedacht ist eine Combobox zu füllen, habe ich anfangs versucht direkt aus FillCombo.java ein Item hinzuzufügen (jComboA.addItem("Test"). Das geht auch nicht. Ich habe es auch mit einem Vector probiert. Geht nicht...

Wenn alles in der Datei frmMain.java steht, klappt es. (!)

Mit anderen Worten. Ich trenne den Code der GUI mit Comboboxen, Jtable etc in frmMain.java von anderen Dateien, die Abfragen ausführen und dann Arrays oder Vectoren zurückgeben, damit die Komponenten in frmMain.java aktualisiert werden können.

Das ist ja der Sinn effizienter Programmmierung. Nur ist der Zugriff auf Komponenten ncht möglich, bzw. sie zeigen die Änderung nicht an. Bei jComboA.addItem("Test") war das Item vorhanden (getestet mit jComboA.getItemIndex), aber nicht sichtbar.

Bitte um Antwort und Fragen. Danke
 
Habe den Fehler gefunden......... :-)
War typischer Anfängerfehler (ich versuche ein Projekt aus VB.NET nach Java umzucoden) ;)

Der Fehler liegt in Datei frmMain.java, wo das Array empfangen wird:
Anstatt:

FillCombo fc = new FillCombo(); // Instanz zu FillCombo.java OK OK OK
fc.FillCombo(); // erwartet Array data // FALSCH FALSCH
System.out.println(data); // Test: Ausgabe ist null

muß es heißen:

FillCombo fc = new FillCombo(); // Instanz zu FillCombo.java OK OK OK
String[] monate = fc.FillCombo(); // ruft Methode in erwartet Array data
System.out.println(monate); // Test: Ausgabe ist OK OK OK

Mein Denkansatz war, den Wert data von "return data" auszulesen.
Man muß beim Empfang aber nur die Methode aufrufen. Ich habe gleich ein Datenobjekt erstellt (hier String [] monate), das dasselbe Format hat, also eindim. Array...

Um nun eine Combobox zu füllen, klappt das in frmMain.java klasse mit:
DefaultComboBoxModel cbm = new DefaultComboBoxModel(monate);
jComboA.setModel(cbm);
Mit fc.FillCombo() als Modellwert wäre es auch gegangen.

Das Füllen der Combo per Modell klappt aber nur in der GUI Datei. Also kommen alle Abfragen, die ich brauche und wiederholt benötigt werden, in eine separate Datei, und ich kann sie immer wieder verwenden.

Vermutlich ist es mit JTable und anderen Komponenten dasselbe.

Erklärt wird das sehr gut hier:
http://groups.google.de/group/de.co...+in+return+wert&rnum=8&hl=de#2f10f98272dbde75

Ein Frage nun noch: kann man im return wert auch mehrere Arrays übergeben ?

Grüße
 
Zurück