Vererbung Zugriff auf in der main erzeugten Distanz aus dritter Klasse

baphomet13

Mitglied
Für ein Datenbank-GUI habe ich drei Klassen (bis jetzt).

Edda.java
Java:
package edda;

import java.util.*;

public class Edda {

	static Gui gui;
	
	public static void main(String[] args) {
		DbOperations db = new DbOperations();
		db.loadDbDriver();
		Gui gui = new Gui(null);
		gui.setText("Hi!\n\n");
		gui.setText(db.dbReturn); // append()ed die Rückgabestrings der loadDbDriver Methode an die JTextArea 'area'

		/* Test: Drucke eine Zeile der Tabelle auf eine Zeile in der GUI, formatiert! */
		db.strArrToGui(null);

	}
}

Gui.java
Java:
package edda;

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

@SuppressWarnings("serial")
public class Gui extends JFrame {
	
    /* Class Variables */
	private JTextArea area;    //Holds the data for text
	
    /**
     * @param textVal Text parameter for output JTextArea 'area'
     */
    public Gui (String textVal)
    {
    	super("Titel");
        
        //Create and set up the window.
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        setJMenuBar(createMenuBar());
        setContentPane(createContentPane());

        // Display JTextArea for Output
        area = new JTextArea();
        area.setEditable(false);
        area.append(getText());
        getContentPane().add(area);

        //Display the window.
        pack();
        setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH);
        setVisible(true);

    }//end constructor Gui

    /**
     * @return JMenuBar
     */
    public JMenuBar createMenuBar() {
        JMenuBar menuBar;
        JMenu menu, submenu;
        JMenuItem menuItem;

        //Create the menu bar.
        menuBar = new JMenuBar();

        //Build the first menu.
        menu = new JMenu("A Menu");
        menu.setMnemonic(KeyEvent.VK_A);
        menu.getAccessibleContext().setAccessibleDescription("The only menu in this program that has menu items");
        menuBar.add(menu);

        //a group of JMenuItems
        menuItem = new JMenuItem("A text-only menu item",KeyEvent.VK_T);
        
        //menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_6, ActionEvent.ALT_MASK));
        menuItem.getAccessibleContext().setAccessibleDescription("This doesn't really do anything");
        menu.add(menuItem);

        //a submenu
        menu.addSeparator();
        submenu = new JMenu("A submenu");
        submenu.setMnemonic(KeyEvent.VK_S);

        menuItem = new JMenuItem("An item in the submenu");
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, ActionEvent.ALT_MASK));
        submenu.add(menuItem);

        menuItem = new JMenuItem("Another item");
        submenu.add(menuItem);
        menu.add(submenu);

        return menuBar;
    } // end method createMenuBar
    
    /**
     * Creates the content pane for the menu bar
     * @return contentPane
     */
    public Container createContentPane() {
        //Create the content-pane-to-be.
        JPanel contentPane = new JPanel(new BorderLayout());
        contentPane.setOpaque(true);

        //Create a scrolled text area.
        area = new JTextArea(5, 30);
        area.setEditable(false);
        area.append(getText());
        JScrollPane scrollPane = new JScrollPane(area);

        //Add the text area to the content pane.
        contentPane.add(scrollPane, BorderLayout.CENTER);

        return contentPane;
    } // end method createContentPane
    
    /* Setters & Getters */
	/**
	 * @return Text for output JTextArea area
	 */
	public String getText ( )
       {
           return area.getText();
       }//end method getText

       /**
     * @param textVal String parameter for output JTextArea 'area'
     */
    public void setText (String textVal)
       {
           area.append(textVal);           
       }//end method setText
       
}

Und DbOperations.java
Java:
/**
 * Includes database operations: driver, connections, queries
 */
package edda;

import java.sql.*;
import java.util.*;

public class DbOperations extends Edda {

	Connection con;
	Statement stmt;
	String loadStr;
	String connectStr;
	String dbReturn;
	String[] strArr;
	
	/**
	 *  Loads the database driver and connects to the database
	 * @return dbErrors String Array mit Rückgaben
	 */
	public String loadDbDriver() {
		/** Load driver */
		try
		{
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			loadStr = "Driver successfully loaded.";
		}
		catch (ClassNotFoundException e)
		{
			System.exit (0);
		}
		
		/** Connect to DB*/
		try
		{
	      	con = DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/-----------------------------------");
	      	connectStr = "Connection to database established.";
	    }
		catch ( SQLException e )
		    {
		      e.printStackTrace();
		    }
		dbReturn = loadStr + "\n" + connectStr;
		return dbReturn;
	} // end loadDbDriver
	
	public String[] printTable(){
		String[] strArr = {"a","b","c"}; // Wird später String[] aus DB Abfragen ResultSet
		return strArr;
	}
	
	public void strArrToGui (String[] arr1){
		Gui gui2 = new Gui(null);
		arr1 = printTable();
		List<String> arrList = Arrays.asList(arr1);
		for (String lstStr : arrList){
		     gui2.setText(lstStr);  
		}  
	}
	
} // endclass

Was super funktioniert (dank Hilfe in diesem Thread) ist, die JTextArea 'area' zu append()en. Allerdings nur aus der main(), die ich eigentlich möglichst kurz und frei halten wollte.

Was ich jetzt vorhatte ist, einen String[] (der später aus der Datenbank kommen soll) in eine ArrayList zu wandeln (funktioniert) und dann Zeile für Zeile an die JTextArea in der Gui-Instanz gui anzuhängen.

So wie ich es jetzt habe, werden natürlich zwei GUIs erstellt, im ersten erscheint der append()ete Text aus der main() (bzw. db.dbReturn), im zweiten der aus der strArrToGui(). Das soll natürlich so nicht sein, ich habe aber keine Ahnung (und auch nichts gefunden), wie ich die in der main() instanziierte gui ansprechen kann um ihr per setText("...") was zu übergeben.

Natürlich könnte ich genau wie bei db.dbReturn einen String von strArrToGui() zurückgeben lassen, aber da dies nur die erste von vielen zu implementierenden Methoden (und der, bei der ich wohl alles lernen muss:oops:) ist, möchte ich das möglichst vermeiden.

Danke für Vorschläge, Code-Fixes, etc. im Voraus!
 

r.w.

Bekanntes Mitglied
Hallo baphomet13,

nur kurz, ohne Deinen Code weiter analysiert zu haben.

Ersetze Deine Zeile 12 in Edda.java durch:

Java:
  gui = new Gui(null);


Dann kannst Du den Text der in der main-Funktion instanzierten Gui per

Java:
  Edda.gui.setText("xxx");

setzen.

Ich hoffe, das hilft schon mal weiter.

VG ROlf
 

baphomet13

Mitglied
Danke! Das hilft schon mal sehr weiter.
Darf ich noch kurz darum bitten, mir zuhelfen das tatsächlich in mein Verständnis zu holen?
Der Unterschied zwischen
Java:
Gui gui = new Gui();
und
Java:
gui = new Gui();
liegt darin, dass in ersterem (also meinem ursprünglichen) Fall eine neue Instanz gebildet wurde, auf die ich nicht so ohne weiteres zugreifen konnte und im zweiten Fall einfach die statische (Klassen?)Variable 'gui' "belegt" wurde? Und auf die statische Klassenvariable kann ich dann ja auch aus den anderen Klassen zugreifen?

Danke im Voraus für kurze Bestätigung bzw. Korrektur!
 

norm

Mitglied
Danke! Das hilft schon mal sehr weiter.
Darf ich noch kurz darum bitten, mir zuhelfen das tatsächlich in mein Verständnis zu holen?
Der Unterschied zwischen
Java:
Gui gui = new Gui();
und
Java:
gui = new Gui();
liegt darin, dass in ersterem (also meinem ursprünglichen) Fall eine neue Instanz gebildet wurde, auf die ich nicht so ohne weiteres zugreifen konnte und im zweiten Fall einfach die statische (Klassen?)Variable 'gui' "belegt" wurde? Und auf die statische Klassenvariable kann ich dann ja auch aus den anderen Klassen zugreifen?

Danke im Voraus für kurze Bestätigung bzw. Korrektur!

Fast!

In diesem Fall kannst du in anderen Klassen des selben Packages auf gui zugreifen, weil du die Sichtbarkeit nicht mit "private" beschränkt hast! Standardmäßig ist die Sichtbarkeit "protected", dass bedeutet das Klassen aus dem selben package auf dieses Attribut zugreifen können.

Btw. Members werden i.d.R. immer als private deklariert! Man benutzt getter/setter Methoden, um diese Attribute aus anderen Klassen heraus zu lesen/ zu verändern.

Statische Attribute sind für alle Instanzen einer Klasse gleich, alle Objekte die du von dieser Klasse erzeugst, zeigen also auf den selben Speicherberich!
Das hat also eigentlich nichts mit der Sichtbarkeit von Attributen in anderen Klassen zu tun.
In diesem Fall muss gui statisch sein, weil du das Objekt in der main-Methode erzeugst. Und aus statischen Methoden kann man immer nur statische Attribute aufrufen.

Ich hoffe das macht es etwas klarer und verwirrt dich nicht komplett ^^

EDIT: Warum sollte die Klasse Edda eigentlich das Member gui haben?
 
Zuletzt bearbeitet:

baphomet13

Mitglied
Ich hoffe das macht es etwas klarer und verwirrt dich nicht komplett ^^

Keinesfalls. Es ruft im Gegenteil die wichtigen Details zurück ins Hirn, die mir nach meinem Java-Einsteigerkurs flöten gegangen sind!

EDIT: Warum sollte die Klasse Edda eigentlich das Member gui haben?

Mit "Member" meinst Du die Deklaration in Zeile 7 der Klasse Edda? Könnte die einfach raus?
 

Crian

Top Contributor
Das hängt von dem Design ab. Irgendwo musst du die eine Gui so vorhalten, dass die anderen Klassen daran können.
Entweder übergibst du sie per Konstruktor oder hast sie als (paket-) sichtbaren Member irgendwo.

Oder du schreibst ein Singleton dafür. Dann musst du sie nirgends vorhalten. Weil sich selbiges selbst verwaltet. Da dieses Konzept aber schlecht zu testen ist, sollte man es eigentlich nur einsetzen, wenn man es wirklich braucht, und das ist hier nicht unbedingt der Fall.


Falls du das statische loswerden willst, kannst du Edda auch so umschreiben:

Java:
public class Edda {
 
    protected Gui gui;
    
    public static void main(String[] args) {
        new Edda();
    }

    public Edda() {
        DbOperations db = new DbOperations();
        db.loadDbDriver();
        gui = new Gui(null);
        gui.setText("Hi!\n\n");
        gui.setText(db.dbReturn); // append()ed die Rückgabestrings der loadDbDriver Methode an die JTextArea 'area'
 
        /* Test: Drucke eine Zeile der Tabelle auf eine Zeile in der GUI, formatiert! */
        db.strArrToGui(null);
 
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
J Zugriff von main-Klasse auf externe Klassen Java Basics - Anfänger-Themen 51
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
H Zugriff verweigert Java Basics - Anfänger-Themen 5
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
ruutaiokwu Bluetooth-Zugriff, braucht es dazu plattformabhängige Libraries oder kann das Java mittlerweile selbst? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
L Methoden Zugriff <identifier> expected Java Basics - Anfänger-Themen 13
T Java - Zugriff nur mit CLASSPATH ? Java Basics - Anfänger-Themen 7
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
A Klassen Zugriff auf Instanzen Java Basics - Anfänger-Themen 2
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
J Klassen Zugriff auf ein "String Array" Java Basics - Anfänger-Themen 6
H Datentypen ArrayList in ArrayList: Zugriff Java Basics - Anfänger-Themen 6
J get methoden zugriff und objekt erzeugung Java Basics - Anfänger-Themen 30
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
T Zugriff auf JCheckBox Java Basics - Anfänger-Themen 8
E Netzlaufwerk Zugriff schlägt fehl Java Basics - Anfänger-Themen 11
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
R Methoden Methode der GUI-Klasse Zugriff auf Methoden der Hauptklasse Java Basics - Anfänger-Themen 9
S Vererbung Zugriff auf die Basisklasse einer "zweiten" Erweiterungsklasse Java Basics - Anfänger-Themen 2
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
J Sichtbarkeit und Zugriff Java Basics - Anfänger-Themen 9
G Wieviel kostet der Zugriff auf Objektattribute im Vergleich zur Erstellung von vars in Methode? Java Basics - Anfänger-Themen 11
L Zugriff auf zwei Java-Quellcodes Java Basics - Anfänger-Themen 3
A OOP Zugriff auf Objekte von außen Java Basics - Anfänger-Themen 8
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
J JDialog Zugriff auf parent JDialog Java Basics - Anfänger-Themen 5
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
F Zugriff auf Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
J Erste Schritte Zugriff auf Eigenschaft Java Basics - Anfänger-Themen 2
M MVC - Problem mit Zugriff auf Objekt Java Basics - Anfänger-Themen 4
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
C 5 - Zugriff verweigert Java Basics - Anfänger-Themen 1
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
Z Zugriff auf andere Methoden Java Basics - Anfänger-Themen 12
Z Zugriff auf Pakete Java Basics - Anfänger-Themen 5
G Zugriff zwischen Klassen Java Basics - Anfänger-Themen 15
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
W OOP Zugriff auf mit Objekt erstellte Struktur Java Basics - Anfänger-Themen 7
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
B Klassen Zugriff auf Daten der Child-Klasse Java Basics - Anfänger-Themen 9
W Typisierte ArrayList und der Zugriff auf den Typ Java Basics - Anfänger-Themen 5
M Zugriff auf Klasse Java Basics - Anfänger-Themen 2
K Zugriff auf C: Java Basics - Anfänger-Themen 5
S Das richtige Format für den SOAP Zugriff Java Basics - Anfänger-Themen 0
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
N Zugriff bei Package Struktur Java Basics - Anfänger-Themen 6
M Enum: Zugriff auf Konstanten Java Basics - Anfänger-Themen 7
V Zugriff auf jProgressbar Java Basics - Anfänger-Themen 10
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
T ZUgriff auf 'Werte' Java Basics - Anfänger-Themen 3
J Vererbung Zugriff auf private Variable Java Basics - Anfänger-Themen 10
C Klassen Zugriff auf Objekt anderer Klasse Java Basics - Anfänger-Themen 8
B Methoden Zugriff auf Variable ermöglichen Java Basics - Anfänger-Themen 3
M Zugriff auf Arraylist Java Basics - Anfänger-Themen 7
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
B Erste Schritte Array-Zugriff Java Basics - Anfänger-Themen 10
D OOP Zugriff auf Objekte A in Klasse A aus Objekt B in Klasse B Java Basics - Anfänger-Themen 3
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
J Threads Zugriff auf Attribute Java Basics - Anfänger-Themen 16
N Kein Zugriff auf Ordner -> NullPointerException Java Basics - Anfänger-Themen 2
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
N Problem bei Zugriff auf Textfelder Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben