Klassen Auf andere Klassenobjekte zugreifen

Waterfront

Mitglied
Moin!

Ich habe Grundlegend was nicht verstanden, ich kann mehrere Klassen erstellen aber ich muss doch irgendwie auf die Objekte einer anderen Klasse zugreifen können !?!

Also ich habe mit Eclipse (Window Builder) ein GUI erstellt und habe dazu eine Hauptklasse. Und mit dieser Hauptklasse möchte ich jetzt den Text in dem TextPane schreiben lassen, bei start des Programms.

Das, wenn ich die Hauptklasse starte, die GUI Klasse sich dann auch öffnet, habe ich schon drinnen:

Java:
GUI start = new GUI();
	    start.setVisible(true);

Ich habe dann mit Google verschiedene Sachen gelesen/versucht :rtfm: aber ich kam nicht auf das was ich erreichen will.

LG
Water
 

fLooojava

Bekanntes Mitglied
Meinst du sowas?

Java:
DeineKlasse klasse2 = new DeineKlasse();
klasse2.deinTextpane.setText("hello world");

Ich denke sowas funktioniert, probiers mal aus, ansonsten kann mich gerne jemand verbessern ;)
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
öffentliche Getter bzw. Setter sind hier denke ich das was du suchst, damit kannst du von außerhalb des Objektes auf private Attribute der jeweiligen Klasse zugreifen.

Java:
public class MeinObjekt{

  private String text;

  public void setText(String s){
     this.text = s;
  }

  public String getText(){
    return this.text;
  }
}

Angenommen du hast nun eine Instanz dieser Klasse :

Java:
MeinObjekt objekt = new MeinObjekt();

dann kannst du jetzt von außen über den öffentlich deklarierten Setter auf das Attribut zugreifen und dieses verändern.

Java:
objekt.setText("Hallo, ich bin ein String!");

ebenso funktioniert das ganze wenn du in einem anderen Objekt eine Referenz auf dieses Objekt hälst,

z.B

Java:
public class Test{

 private MeinObjekt objekt;

 public Test(MeinObjekt objekt){
       this.objekt = objekt;
 }

 public void print(){
   System.out.println(this.objekt.getText());
 }

}

so kannst du z.B wenn du ein Objekt der Klasse Test erzeugst , eine Instanz der Klasse MeinObjekt übergeben und über die Methode print der Klasse Test , welche die Methode getText() der Klasse MeinObjekt aufruft den Wert des Attributes des jeweiligen Objektes ausgeben. ( hier natürlich nur zur darstellungszwecken)

Java:
MeinObjekt obj = new MeinObjekt();
obj.setText("Test");

Test t = new Test(obj);
t.print();

Poste doch mal deinen Code dann kann man ggf. sehen wo dein Fehler liegt ;)
 
Zuletzt bearbeitet:

fLooojava

Bekanntes Mitglied
@kaoZ:
Ohne Getter/Setter - sprich so wie ich es kurz angedeutet habe funktioniert es nicht?
Java:
    DeineKlasse klasse2 = new DeineKlasse();
    klasse2.deinTextpane.setText("hello world");
 
Zuletzt bearbeitet:

Waterfront

Mitglied
Okay also ich habe jetzt in der GUI Class folgendes mit drin:

Java:
	private JTextPane textfeld;
	
	
	public void setText(String s){
		this.textfeld.setText(s);
	}

in der Main.class ist dazu noch:

Java:
  public static void main(String[] args) throws IOException, JSONException {
	    GUI start = new GUI();
	    start.setText(" BlaBlaBlaBlaaaaaa");   
	    start.setVisible(true); 
}

Dann kommt folgende Fehlermeldung im Compiler:
Java:
Exception in thread "main" java.lang.NullPointerException
	at GUI.setText(GUI.java:20)
	at Main.main(Main.java:19)
 

fLooojava

Bekanntes Mitglied
Guck dir nochmal meine zwei Codezeilen an und vergleich die mit deinen. Schau dir vorallem mal folgende Zeile bei dir an:

Java:
start.setText(" BlaBlaBlaBlaaaaaa");

Fällt dir was auf?
 

fLooojava

Bekanntes Mitglied
Java:
   GUI start = new GUI();
        start.namevomtextfeld.setText(" BlaBlaBlaBlaaaaaa");

So sollte es richtig heißen. Probier mal ob's so klappt. Du musst schon dein Objekt, in deinem Fall das Textfeld ansprechen.

Ändere dies mal ab und berichte ob's klappt.
 
Zuletzt bearbeitet:

Waterfront

Mitglied
Aaalso:

Ich habe das jetz wiefolgt in der Main.Class:

Java:
GUI start = new GUI();
	    start.textfeld.setText("Bla");

Aaaber:

Es kommt folgender Error:
Java:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The field GUI.textfeld is not visible

	at Main.main(Main.java:19)

Wenn ich dann die von Eclispe vorgeschlagene "change the visibility blaa" mache, dann wird erstmal alles als richtig angezeigt. Es wird in der Gui Klasse folgendes geänderrt:

Java:
//Von:

private JTextPane textfeld;

//Zu:

JTextPane textfeld;

Wenn ich dann das Programm ausführe kommt der Error (welcher die Zeile start.textfeld.setText("Bla"); meint):
Java:
Exception in thread "main" java.lang.NullPointerException
	at Main.main(Main.java:19)
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Du hast um wirklich was nachvollziehen zu können zu wenig Code gepostet, hier mal ein schnell zusammengezimmertes Beispiel :

Vielleicht wird hier das OO nutzen ein wenig klarer ;)

Die Klasse Text bietet hier zu Anschauungszwecken nur einen Setter und einen Getter an, dies sollte im Standardfall vermieden werden da es sonst zu Inkonsistenzen bei der Objektinitialisierung kommen kann.

Hier ist aber das zusammenspiel der beiden Klassen relativ schön zu sehen, die Klasse Gui hält eine Referenz auf ein Text Objekt, und wird im Konstruktor der Klasse Gui Initialisiert, in der privaten Methode
Code:
init();
der Klasse Gui wird dann der JFrame initialisiert und über den getter der Klasse Text mit einem Titel gefüllt.

Man könnte hier den Fenstertitel auch direkt setzen aber es geht ja um das aufzeigen des Zugriffes auf nicht statische Methoden anderer Klassen

Text.java
Java:
public class Text {
	
	private String text;
	
	public Text() {}

	public void setText(String text){
		this.text = text;
	}
	
	public String getText(){
		return this.text;
	}
}


Gui.java
Java:
import java.awt.Dimension;

import javax.swing.JFrame;

public class Gui{
	
	private Text text;
	private JFrame frame;
	
	public Gui(String title) {
		text = new Text();  // setter der Klasse Text
		text.setText(title);
		init();
    }
	
	private void init(){
		frame = new JFrame(text.getText());  // getter der Klasse Text
		frame.setSize(new Dimension(250,300));
		frame.setLocationRelativeTo(null);
		
	}
	
	public void setVisible(){
		frame.setVisible(true);
	}
	
	public static void main(String[] args) {
	    Gui gui = new Gui("Mein Fenster");
	    gui.setVisible();
    }

}

Bei Fragen immer raus damit ;)

Natürlich kann man auch Attribute der Klasse mit einem öffentlichen Zugriffsmodifizierer ausstatten , dies sollte aber unter allen Umständen vermieden werden , da nur das Objekt selbst seinen Zustand ändern können sollte deshalb bietet man insofern ein ändern notwendig sein sollte , einen öffentlichen Setter an ;)

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The field GUI.textfeld is not visible

Das liegt daran das du hier versuchst auf ein privates attribut von außen zuzugreifen. angenommen die main Methode würde sich in einer anderen Klasse befinden, dann würde er dir dieses Attribut nicht einmal anzeigen da es eben nur innerhalb der Klasse sichtbar ist , anders sieht das ganze aus wenn man es entweder package private , protected oder sogar public deklariert, dann könnte man je nach Fall das Attribut auch direkt ansprechen, dies sollte wenn es sich nicht um eine Konstante handelt möglichst vermieden werden.
 
Zuletzt bearbeitet:

Waterfront

Mitglied
Mhh also damit ich nicht durcheinander komme habe ich mal ein neue Projekt gemacht und da dein Beispiel Code reingeschmissen.

Erstmal Danke, dass du so ausführlich mit Beispiel geantwortet hast!!! :toll: ;)

Also ich habe nicht ganz verstanden wofür in Gui.java "public Gui(String title)" ist und wofür in Text.java

Java:
	public void setText(String text) {
		this.text = text;
	}

	public String getText() {
		return this.text;
	}
ist.

Es ist aber schon richtig, das ich mit der zeile
Java:
Gui gui = new Gui("Mein Fensterino");
Den Namen von dem Fenster in der Gui.java festlegen ?!? ???:L

LG
Water
 

kaoZ

Top Contributor
Den Namen von dem Fenster in der Gui.java festlegen ?!?

Hierbei ging es nur darum das du sehen kannst wie diese beiden Klasse zusammenarbeiten, eben getter und setter, also wie du aus der einen Klasse auf Attribute einer anderen Klasse bzw. eines anderen Objektes zugreifen kannst.

Also ich habe nicht ganz verstanden wofür in Gui.java "public Gui(String title)" ist und wofür in Text.java

dies diente nur als beispiel ;)

Java:
public Gui(String title){...}

ist der Konstruktor, in welchem hier der per Parameter vom Typ String an die Klasse / an den setter der klasse Text übergeben wird, und somit ein neues Text Objekt initialisiert wird.
 
Zuletzt bearbeitet:

Waterfront

Mitglied
So ich habe mir das jetzt mal nach ner Pause angeschaut und glaube ich habs verstanden. Also ich habe mit selber ein Beispiel gebastelt.
Funktionieren tun die Setter, jedoch geben mir die Getter beide "null" aus!?!

Hier mal der Komplette Code:

Java:
public class Hauptklasse {

	public static void main(String[] args) {
		Nebenklasse f = new Nebenklasse();
		f.setFrameText("Kappa");
		f.setLabelText("LabelText");
		
		System.out.println(f.getFrameText());
		System.out.println(f.getLabelText());
	}
}


Java:
import javax.swing.*;
import java.awt.Dimension;

public class Nebenklasse{ 

	private JFrame frame;
	private JLabel label;
	private String getFrameText;
	private String getLabelText;
	
	public void setFrameText(String text){
		frame = new JFrame(text);	
		init();
	}
	
	public void setLabelText(String text){
		label = new JLabel(text);
		label.setVisible(true);
		frame.add(label);
	}
	
	private void init(){		
		frame.setSize(new Dimension(250,300));
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
	
	public String getFrameText(){
		return getFrameText;		
	}
	
	public String getLabelText(){
		return getLabelText;		
	}
}
 

turtle

Top Contributor
Nun, ich behaupte, das du es NICHT verstanden hast.
Du rufst auf
Java:
 System.out.println(f.getFrameText());
Schau mal was da gemacht wird?

Java:
	public String getFrameText() {
		return getFrameText;
	}
Es wird die Variable getFrameText zurückgegeben und die hat den Wert?
Code:
null
weil du nirgends einen Wert zuweist. Üblicherweise macht man das im setter also
Java:
	public void setFrameText(String text) {
		frame = new JFrame(text);
		init();
	}
Aber auch hier keine Wertzuweisung an getFrameText.
 

kaoZ

Top Contributor
@TO

mal abgesehen davon sollte man die Objekterzeugung nicht erst im setter realisieren, den dafür ist dieser letzten endes eigentlich nicht gedacht, sondern lediglich dazu Werte im nachhinein verändern zu können, außerdem solltest du später diesen Setter nochmal aufrufen , weißt du jedes mal der Referenz ein neues Objekt zu, und dies ist mit unter sehr suboptimal ;)
 
Zuletzt bearbeitet:

Waterfront

Mitglied
Okay ich habe es umgeschrieben, hast recht ist irgendwie doof jedesmal bei setFrameText ein Frame rstellen zu lassen :bloed: Sonst irgendwelche Mängel?

Java:
public class Hauptklasse {

	public static void main(String[] args) {
		Nebenklasse f = new Nebenklasse();
		f.setFrameText("Kappa");
		f.setLabelText("LabelText");
		
		System.out.println(f.getFrameText());
		System.out.println(f.getLabelText());
	}
}

Java:
import javax.swing.*;
import java.awt.Dimension;

public class Nebenklasse{ 

	private JFrame frame;
	private JLabel label;
	private String getFrameText;
	private String getLabelText;
	
	public Nebenklasse(){
		frame = new JFrame();
		frame.setSize(new Dimension(250,300));
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		
		label = new JLabel();
		label.setVerticalAlignment(SwingConstants.CENTER);
		label.setHorizontalAlignment(SwingConstants.CENTER);
		label.setVisible(true);
		
		frame.add(label);		
	}
	
	public void setFrameText(String text){
		frame.setTitle(text);
	}
	
	public void setLabelText(String text){
		label.setText(text);
	}
	
	public String getFrameText(){
		getFrameText = frame.getTitle();
		return getFrameText;		
	}
	
	public String getLabelText(){
		getLabelText = label.getText();
		return getLabelText;		
	}
}
 
Zuletzt bearbeitet:

GMS

Mitglied
Hallo
Ich hab da eine Frage:
Hab zwei Klassen
Main:
public class main{
private int x;
private int z;
public main(){
z=3;
}
public void chanche_x(int z){
x=z;
System.out.print("x ist jetzt "+x+".");
}
}
Und eine sub >:
public class sub{
private main objekt;
public sub(main objekt){
this.objekt = objekt;
}
public void chanche_x(){
objekt.chanche_x(int z [.]);
}
}

Beim compilen kommt bei stelle [.]
der Fehler .class expectet
Hat jemand eine Idee was das sein könnte
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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 Best Practice Auf DefaultTableModel in andere Klasse zugreifen 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 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
M Daten in DB oder andere möglickeiten. Java Basics - Anfänger-Themen 5
S Erste Schritte import für andere Klassenfiles verfügbar machen? (Java unter Eclipse) Java Basics - Anfänger-Themen 8
N Klassen auf den Action Listener in einer andere Klasse zugreifen Java Basics - Anfänger-Themen 6
W objektorientierte Programmierung - String in andere Klasse übergeben Java Basics - Anfänger-Themen 13
D Methoden Methode über andere Klasse aufrufen Java Basics - Anfänger-Themen 7
H Wie while Schleife in andere Klasse verlagern? Java Basics - Anfänger-Themen 11
B Variablenübergabe an andere Klasse, Ausgabe Java Basics - Anfänger-Themen 3
W Übergabe Stringzeilen von serieller Schnittstelle in andere Klasse Java Basics - Anfänger-Themen 3
U Zugriff auf andere Packages Java Basics - Anfänger-Themen 10
E Wert in eine andere Klasse übergeben Java Basics - Anfänger-Themen 3
B Übergabe Dateiname (String) an andere Klasse Java Basics - Anfänger-Themen 4
S Erste Schritte Wo steht eigentlich das ein jar keine andere jars enthalten darf? Java Basics - Anfänger-Themen 19

Ähnliche Java Themen

Neue Themen


Oben