Best Practice Auf DefaultTableModel in andere Klasse zugreifen

julianpe

Aktives Mitglied
Hallo,
ich habe eine Klasse MainWindow.java. Dort wird die grafische Oberfläche meines Programms erstellt und u.A. auch ein JTable mit einem DefaultTableModel definiert.
Zum Aktualisieren des Inhaltes des JTables nutze ich die Funktion:
Java:
updateCustomerTable()

Nun möchte ich gerne aus einem anderen aktiven Fenster diese Funktion zum Neuzeichnen des Tabelle aufrufen.

Abschnitte aus der MainWindow.java:
Java:
    public void updateCustomerTable() throws SQLException
    {
      
      
        Vector<String> VecColumnName = new Vector<String>();
        VecColumnName.add("ID:");
        VecColumnName.add("Name:");
        VecColumnName.add("Vorname:");
        VecColumnName.add("Geb.-Datum:");
        VecColumnName.add("Straße:");
        VecColumnName.add("PLZ:");
        VecColumnName.add("Stadt:");
        VecColumnName.add("Email:");
        VecColumnName.add("Telefon:");
        VecColumnName.add("Handy:");
        VecColumnName.add("Bemerkung:");
      
        // Tabellengrundgerüst erstellen
        tableCustomer = new JTable();
        tableCustomer.setSelectionBackground(Color.darkGray);
        tableCustomer.setAutoCreateRowSorter(true);
      
        // Tabellenüberschrift formatieren
        JTableHeader header = tableCustomer.getTableHeader();
        header.setFont( header.getFont().deriveFont(16) );
      
        // Instanz des DBHandler wird erstellt
        DBHandler dbH = new DBHandler();
      
        // Ergebnis der Datenbankabfrage wird in Vector geschrieben
        Vector<Vector<String>> VecData = new Vector<Vector<String>>();
        VecData = dbH.getCustomerData();
      
        // Neues DefaultTableModel wird erstellt
        DefaultTableModel model = (DefaultTableModel) tableCustomer.getModel();
      
        // Ergebnisse der Datenbankabfrage werden mit Spaltenüberschrift in Tabelle geschrieben
        tableCustomer.setModel(new DefaultTableModel(VecData, VecColumnName));
        scrollPaneCustomer.setViewportView(tableCustomer);
      
        // Tabelle neu zeichnen
        model.fireTableDataChanged();

    }

Wie ist hierbei die beste practise?
Eine neue Instanz der MainWindow fällt raus, da hier dann wieder eine neue grafische Oberfläche erstellt wird. Ein statischer Zugriff ist ebenfalls nicht zu empfehlen.

Besten Dank im Voraus

gruß
Julian
 

thet1983

Top Contributor
mit einer referenz.
Java:
public class Foo{
   private MainClass main = null;
   public Foo(MainClass main){
       this.main = main;
  }

  // main.updateCustomerTable();
}

Wobei deine Methode keine updateMethode ist denn du erstellst immer wieder ein neues model und einen neuen table.
wenn du updaten / refreshen willst dann solltest du nur die daten neu holen und dem model übergeben.
 
Zuletzt bearbeitet von einem Moderator:

julianpe

Aktives Mitglied
Ich rufe das neue Fenster aus dem ich den Befehl an das Hauptfenster für das Neuzeichnen der Tabelle schicke, mittels ActionListener auf. Momentan sieht der Aufruf so aus:
Java:
                CustomerWindow cw = new CustomerWindow();
                cw.initWindow();

Auf der CustomerWindow.java Seite sieht es an entsprechender Seite aus:

Java:
public class CustomerWindow extends JDialog {


    private final JPanel contentPanel = new JPanel();
    private MainWindow main = null;   

public void initWindow(MainWindow main){
       
        this.main = main;

       
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setVisible(true);
       
    }

Welchen Übergabeparameter muss ich beim Funktionsaufruf aus der MainWindow.java übergeben?
 

incluedu

Mitglied
Hallo
Man kann zwar eine Referenz übergeben, das ist auch sicher einfacher hat aber den Nachteil das dein Customer Window nicht mehr in Anderen Klassen verwendet werden kann welche dein MainWindow nicht kennen.

Meiner Meinung nach ist es besser und auch richtiger hier einen Listener bzw Callback zu verwenden. Du könntest z.B. einen PropertyChangeListener von Swing verwenden oder deinen eigenen Callback implementieren.

Hier ein kleines Beispiel wie sowas mit dem PropertyChangeListener geht.

Java:
package callback;

import callback.Gui.MainFrame;
import javax.swing.*;

public class App {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new MainFrame());
    }
}

In der MainFrame Klasse wird der Listener implementiert und wenn die Property mit dem richtigen Namen kommt dann wird die UpdateMethode aufgerufen. Das Implementierte Interface wird der CustomerDialog Klasse jedesmal hinzugefügt wenn diese Initialisiert wird.
Java:
package callback.Gui;

import javax.swing.*;
import java.awt.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

public class MainFrame extends JFrame implements PropertyChangeListener {

    public MainFrame() throws HeadlessException {

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        setSize(500, 800);
        setLocationRelativeTo(null);
        setTitle("Callback Demo");
        setVisible(true);

        JButton buttonOpen = new JButton("Open");
        buttonOpen.addActionListener(e -> onOpenAction());

        add(buttonOpen);
    }

    private void onOpenAction() {
        CustomerDialog cd = new CustomerDialog(this,"Customer Dialog", false);
        cd.addPropertyChangeListener("testProperty", this);
        cd.setVisible(true);
    }

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        if (evt.getPropertyName().equals("testProperty")){
            updateTable();
        }
    }

    private void updateTable() {
        System.out.println("MainFrame.updateTable");
    }
}

In der CustomerDialog Klasse wird beim drücken des Buttons Action ein Event erzeugt welcher dann in der MainWindow Klasse ausgewertet wird.
Java:
package callback.Gui;

import javax.swing.*;
import java.awt.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

public class MainFrame extends JFrame implements PropertyChangeListener {

    public MainFrame() throws HeadlessException {

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        setSize(500, 800);
        setLocationRelativeTo(null);
        setTitle("Callback Demo");
        setVisible(true);

        JButton buttonOpen = new JButton("Open");
        buttonOpen.addActionListener(e -> onOpenAction());

        add(buttonOpen);
    }

    private void onOpenAction() {
        CustomerDialog cd = new CustomerDialog(this,"Customer Dialog", false);
        cd.addPropertyChangeListener("testProperty", this);
        cd.setVisible(true);
    }

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        if (evt.getPropertyName().equals("testProperty")){
            updateTable();
        }
    }

    private void updateTable() {
        System.out.println("MainFrame.updateTable");
    }
}

Wenn du nicht die Implementation von Swing verwenden möchtest dann habe ich im Artikel http://www.java-forum.org/thema/actionlistener-fuer-alle-buttons.174853/ ein Beispiel aufgezeigt wie das geht.

Wie gesagt es geht auch anders aber so ist das dann wirklich objektorientiert und der Code auch von einem anderen Fenster aus aufrufbar.

Viel Spaß damit
 

incluedu

Mitglied
Sorry hab grad gesehen das ich die falsche Klasse gepostet habe hier noch die richtige CustomerDialog Klasse.

Java:
package callback.Gui;

import javax.swing.*;
import java.awt.*;

public class CustomerDialog extends JDialog{
    public CustomerDialog(Frame owner, String title, boolean modal) {
        super(owner, title, modal);
        initDialog(owner);
    }

    private void initDialog(Component owner) {
        setLayout(new FlowLayout());
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setSize(300,70);
        setLocationRelativeTo(owner);

        JButton buttonTest = new JButton("Action");
        buttonTest.addActionListener(e -> onTestAction());
        add(buttonTest);

    }

        private void onTestAction() {
        firePropertyChange("testProperty",false,true);
    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C defaulttablemodel setcolumnidentifiers Java Basics - Anfänger-Themen 10
G DefaultTableModel Spalten in Array schreiben Java Basics - Anfänger-Themen 4
D DefaultTableModel .add Java Basics - Anfänger-Themen 16
NoXiD Datentypen ArrayList in DefaultTableModel als Datenquelle Java Basics - Anfänger-Themen 5
A Kann DefaultTableModel nicht in .txt File speichern Java Basics - Anfänger-Themen 15
root84 DefaultTableModel.addColumn -> ArrayIndexOutOfBounceExcep Java Basics - Anfänger-Themen 6
G Vectoren in DefaultTableModel Java Basics - Anfänger-Themen 8
M JTable - DefaultTableModel - neue Row per Button-Klick Java Basics - Anfänger-Themen 2
S Vector an DefaultTableModel übergeben .Vector is undefined Java Basics - Anfänger-Themen 8
G TableSorter und DefaultTableModel Java Basics - Anfänger-Themen 3
S jTable und DefaultTableModel Java Basics - Anfänger-Themen 3
J DefaultTableModel will nicht Java Basics - Anfänger-Themen 4
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
C Int an andere Klasse übergeben Java Basics - Anfänger-Themen 26
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
C In String, Buchstaben ersetzen durch andere Buchstaben Java Basics - Anfänger-Themen 26
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
M Integer aus aus einer Klasse in andere speichern Java Basics - Anfänger-Themen 12
A Selbe Aufgaben stellung, andere Lösung Java Basics - Anfänger-Themen 7
S ArrayList in andere Klasse übernhemen Java Basics - Anfänger-Themen 5
Y Java andere Klasse aufrufen Java Basics - Anfänger-Themen 6
J Combobox füllen mit Wertausgabe von andere Klasse Java Basics - Anfänger-Themen 3
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
E Methode soll andere Methode der selben Klasse aufrufen Java Basics - Anfänger-Themen 28
B Mit webservice a) String auf Webseite ausgeben b) Weiterleitung auf andere Seite Java Basics - Anfänger-Themen 10
J Übergabe von Parametern an andere Methoden Java Basics - Anfänger-Themen 5
scratchy1 Kann man in einer Methode eine andere aufrufen? Java Basics - Anfänger-Themen 2
G JTextField per Button speichern und an andere Klasse übergeben Java Basics - Anfänger-Themen 2
R Weitergabe von Arrays aus Methoden in andere Klasse Java Basics - Anfänger-Themen 5
M JTable an andere Klasse übergeben Java Basics - Anfänger-Themen 2
neerual Klassen Wie rufe ich Klassen, die andere Klassen extenden in einer Test Unit auf? Java Basics - Anfänger-Themen 10
E Variable (Vektor) in andere Methode übergeben Java Basics - Anfänger-Themen 4
F Input/Output die eine txt-Datei funktioniert die andere nicht Java Basics - Anfänger-Themen 8
W Klassen greifen auf andere Klassen zu Java Basics - Anfänger-Themen 1
L Klassen Objekt aus einer Warteschlange in eine andere übergeben, geht nicht? Java Basics - Anfänger-Themen 6
A Variablen Main Klasse soll auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 3
F OOP Instanz einer Klasse an eine andere weitergeben Java Basics - Anfänger-Themen 16
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
S verweis auf andere Klasse fehler Java Basics - Anfänger-Themen 3
D Klassen Wert aus JTextfield in JLabel (andere Klasse) darstellen. Java Basics - Anfänger-Themen 60
JavaNewbie2.0 Strings in andere Klassen importieren. Java Basics - Anfänger-Themen 2
M Methoden Int einer Methode an eine andere Methode übergeben Java Basics - Anfänger-Themen 4
J Werte an eine andere Klasse übergeben Java Basics - Anfänger-Themen 4
I Zähler, der erst wieder zählt nachdem Pixel wieder andere Farbe hat Java Basics - Anfänger-Themen 2
M Variablen Eine etwas andere if Abfrage ! Java Basics - Anfänger-Themen 10
P Variablen Wie kann ich eine lokale Variable in eine andere Methode einfügen? Java Basics - Anfänger-Themen 27
P auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 12
F Ja Nein Abfrage und andere Probleme Java Basics - Anfänger-Themen 5
A Nach Druck eines Buttons reagieren andere Button nicht Java Basics - Anfänger-Themen 3
TheMenox Methoden Bestimmung an welche Methode eine andere Methode ihren Wert weitergeben soll Java Basics - Anfänger-Themen 35
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
V Andere Schreibweise für % Modulo Java Basics - Anfänger-Themen 9
L Variable an andere Klasse weitergeben - Was mache ich falsch? Java Basics - Anfänger-Themen 2
O Übergabe in eine andere Klasse Java Basics - Anfänger-Themen 3
T Integer Wert in andere Methode übergeben Java Basics - Anfänger-Themen 2
Z Zugriff auf andere Methoden Java Basics - Anfänger-Themen 12
F double[] an andere Methode übergeben Java Basics - Anfänger-Themen 1
N Variablen ändern wenn eine andere geändert wird Java Basics - Anfänger-Themen 7
J 2 dimensionales Array an andere Methode übergeben? Java Basics - Anfänger-Themen 1
T Kommandozeilenparameter in andere Methode Java Basics - Anfänger-Themen 17
D Bestimmte Werte von Objekten aus einer ArrayList in eine andere ArrayList kopieren Java Basics - Anfänger-Themen 14
W Wert an andere Klasse übergeben Java Basics - Anfänger-Themen 8
I Java Eingabe aus einer anderen Klasse in eine andere an Konstruktor übergeben Java Basics - Anfänger-Themen 4
T Array in andere Klasse verwenden Java Basics - Anfänger-Themen 3
W Klassen Auf andere Klassenobjekte zugreifen Java Basics - Anfänger-Themen 20
W Variable an andere Klasse übergeben Java Basics - Anfänger-Themen 3
J JComboBox in andere Klasse Java Basics - Anfänger-Themen 2
E OOP Methode an andere Methode übergeben / OOP Anfänger Java Basics - Anfänger-Themen 4
K Erste Schritte Classe in andere Einfügen?? Java Basics - Anfänger-Themen 12
U Inhalt von JTextfield an andere Klasse weitergeben Java Basics - Anfänger-Themen 13
O Java Interfaces für andere Programmiersprachen zur Verfuegung stellen? Java Basics - Anfänger-Themen 2
S Aus einer Klasse eine andere laden Java Basics - Anfänger-Themen 6
L Variable andere Variable und z.B. Preis zuordnen Java Basics - Anfänger-Themen 7
M Variablen übergeben an andere Klasse Java Basics - Anfänger-Themen 9
O Dezimalzahl in andere Zahlensysteme Java Basics - Anfänger-Themen 5
M Datei an andere Datei komplett anhängen Java Basics - Anfänger-Themen 11
S Methoden Rückgabewert einer Methode als Parameter an eine andere Methode übergeben, geht das? Java Basics - Anfänger-Themen 5
J Kann ein Objekt andere Objekte beinhalten ? Java Basics - Anfänger-Themen 33
S TextArea, RandomAccessFile, Apend und andere Tricks... Java Basics - Anfänger-Themen 7
O Variabeln aus einer andere Klasse dauerhaft einen anderen Wert übergeben Java Basics - Anfänger-Themen 5
K Best Practice In Klassen auf andere Objekte mit variablen Namen zugreifen Java Basics - Anfänger-Themen 6
O Methode in andere Klasse verlegt, "auslesen" einer HTML Seite verschnellert - Problem. Java Basics - Anfänger-Themen 4
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
S Klassen Mit Mainklasse auf andere zugreifen Java Basics - Anfänger-Themen 3
L Strings in andere Klassen "übergeben" Java Basics - Anfänger-Themen 3
N Probleme mit Class in andere Class adden (Cardlayout) Java Basics - Anfänger-Themen 2
P Eingabe aus JTextField/Area an eine andere Klasse übergeben. Java Basics - Anfänger-Themen 2
B Methode in andere Klasse verschieben Java Basics - Anfänger-Themen 9
G ResultSet übergeben bzw. in andere Variable übernehmen Java Basics - Anfänger-Themen 6
G Projekte importieren und andere Fragen Java Basics - Anfänger-Themen 3
Joew0815 Klassen Andere Klassse in Main starten Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben