Zugriff auf Variablen eines Objektes ohne sie auf static zu setzen

M

Mchicken

Gast
Hallo,
Ich habe eine Klasse Main in deren main-Methode ich über new Frame(); die Klasse "Frame" starte.
In "Frame" ist die GUI angelegt. Desweiteren habe ich eine Klasse "OK_Action", welche als ActionListener eines OK-Buttons aus der Klasse Frame fungiert. In "OK_Action" möchte ich nun auf Variablen/Werte aus dem aktuellen "Frame"-Objekt zugreifen, also z.B JTextFields invisible setzten oder so etwas in der Richtung.
Ich habe momentan alle Variablen/JButtons/JLabels in "Frame" auf static gesetzt, was natürlich nicht sehr schön ist.

Ich bin momentan damit überfordert, wie ich sonst auf die Elemente im aktuellen "Frame"-Objekt zugreifen soll, da dieses Objekt nur in der Klasse Main existent ist.

Hoffe ihr versteht was ich meine :(.

Gruß Mchicken
 
C

Camino

Gast
Der Klasse "OK_Action" eine Referenz von Frame mit übergeben, dann kannst du auch auf Methoden (public) in Frame zugreifen.
 
M

Mchicken

Gast
Ich glaube ich steh grad total auf dem Schlauch,
also den ActionListener weise ich so zu
Java:
ok_button.addActionListener(new OK_Action());
.
Ich soll also dem Konstruktor von OK_Action die Referenz übergeben, ja?
Aber wie lege ich die Referenz an? Bzw. wie sieht sie aus?

Sorry, kenn mich leier noch nicht so gut aus :(

Gruß Mchicken
 

jgh

Top Contributor
bspw. so... deine static-Variablen am besten gleich in private ändern und dann entsprechende getter-Methoden bereitstellst.

Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class MyJFrame extends JFrame {
	public static void main(String[] args) {
		new MyJFrame();
	}

	private JButton buttonOK = new JButton("OK");
	private OK_Action listener = new OK_Action(this);

	public MyJFrame() {
		setSize(300, 300);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		add(buttonOK, BorderLayout.SOUTH);
		buttonOK.addActionListener(listener);
		setVisible(true);
	}

	public JButton getButtonOK() {
		return buttonOK;
	}
}

class OK_Action implements ActionListener {
	MyJFrame f;
	int i = 1;

	public OK_Action(MyJFrame f) {
		this.f = f;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		f.getButtonOK().setText("OK wurde " + i + "x gedrückt");
		i++;
	}
}
 

Mchicken

Neues Mitglied
Ah vielen vielen Dank. Ich wusste nicht, dass man die Referenz des Objektes mit "this" übergeben kann :)

Noch zwei kleine grundlegende Fragen, so initialisiere ich die GUI-Elemente

Java:
public class Frame {
	
	public JTextArea gamefield;
	public JTextField name1_tf;
	public JTextField name2_tf;
	public JLabel name1_l;
	public JLabel name2_l;
	public JButton ok_button;
	public JButton[] throw_buttons;
	
	
	public Frame(){

1. Der Sinn die Elemente außerhalb einer Methode zu initialisieren liegt doch darin, dass diese dann in jeder Klasse zugänglich sind, oder?

2. Sollte ich die Elemente dann immer über "this." (also this.gamefield) ansprechen, und falls ja wieso?

Gruß Mchicken
 
C

Camino

Gast
Die GUI-Elemente würde ich von public auf private ändern, dann sind sie in der Klasse (auch in Methoden) erreichbar. Wenn du von ausserhalb auf die Elemente zugreifen möchtest, dann mit einer public-Methode in der Klasse.

Zu 2.) Innerhalb der Klasse kannst aber musst du nicht die Elemente mit this. ansprechen.
 

tuttle64

Bekanntes Mitglied
1. Der Sinn die Elemente außerhalb einer Methode zu initialisieren liegt doch darin, dass diese dann in jeder Klasse zugänglich sind, oder?

2. Sollte ich die Elemente dann immer über "this." (also this.gamefield) ansprechen, und falls ja wieso?

Gruß Mchicken


Zu 1.: Nein, denn ein direkter Zugriff auf Klassenelemente ausserhalb der Klasse spricht für ein schlechtes Design. Der Sinn liegt darin, dass diese Felder, selbst bei privatem Zugriff, für alle Methoden INNERHALB der Klasse zugänglich sind.
Zu 2.: This ist nur dann wirklich nötig, wenn ein Klassenfeld die gleiche Bezeichnung wie eine lokale Variable hat und Du auf das Klassenfeld zugreifen willst. Ich benutze this immer bei Klassenfeldern, denn m.E. erhöht es die Lesbarkeit.
 

xehpuk

Top Contributor
Ergänzend ein Beispiel mit Inner Class:
Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class MyJFrame extends JFrame {
	public static void main(String[] args) {
		new MyJFrame();
	}

	private JButton buttonOK = new JButton("OK");

	public MyJFrame() {
		setSize(300, 300);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		add(buttonOK, BorderLayout.SOUTH);
		buttonOK.addActionListener(new OK_Action());
		setVisible(true);
	}

	private class OK_Action implements ActionListener {
		private int i = 0;

		@Override
		public void actionPerformed(ActionEvent e) {
			buttonOK.setText("OK wurde " + ++i + "x gedrückt");
		}
	}
}

Statt "initialisieren" meinst du wohl "deklarieren".

Mit "außerhalb einer Methode" ist dann wohl gemeint, die Variablen als Instance Members zu deklarieren? Ja, dann sind sie (je nach Access Level Modifier) nach außen, aber auch innerhalb der Klasse für andere Methoden sichtbar.

Das "this" kannst du meistens weglassen. Normalerweise spricht man diese Variablen indirekt über Getter und Setter an (und hat die Variablen an sich private oder protected).
 

turtle

Top Contributor
Noch zwei kleine grundlegende Fragen, so initialisiere ich die GUI-Elemente

<KorinthenkackMode>
So deklarierst Du Deine Variablen. In Java werden Objekt-Variablen automatisch mit NULL initialisiert.
Richtiges initialisieren geht über einen Konstruktor-Aufruf, also new...
</KorinthenkackMode>
 

jgh

Top Contributor
1. Der Sinn die Elemente außerhalb einer Methode zu initialisieren liegt doch darin, dass diese dann in jeder Klasse zugänglich sind, oder?
2. Sollte ich die Elemente dann immer über "this." (also this.gamefield) ansprechen, und falls ja wieso?

meine 5 Cent auch noch dazu ;)

zu 1.) Nein, sondern nur das sie innerhalb der gesamten Klasse sichtbar sind.
zu 2.) Auch nein :)

zum Unterschied zwischen deklarieren...und initialisieren ist ja schon was gesagt worden :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
H SWT NullPointerException bei Zugriff auf Variablen des Hauptfensters AWT, Swing, JavaFX & SWT 6
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
J JavaFX JavaFX Splitpane - Zugriff auf die Controller der Elemente AWT, Swing, JavaFX & SWT 8
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
L JavaFX Zugriff auf HostServices im FXML Controller AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
J JavaFX Zugriff auf Child AWT, Swing, JavaFX & SWT 4
C JavaFX Zugriff auf TextField aus einer anderen Klasse AWT, Swing, JavaFX & SWT 4
wolfgang63 JavaFX Zugriff auf Guiobjekte die über FXML erstellt wurden AWT, Swing, JavaFX & SWT 2
F JavaFX Zugriff auf Controller Methode von einer normalen Klasse aus AWT, Swing, JavaFX & SWT 4
C JavaFX Zugriff auf TableView AWT, Swing, JavaFX & SWT 2
D JavaFX Zugriff auf Controller erlangen AWT, Swing, JavaFX & SWT 4
L Zugriff auf JavaFX Controls AWT, Swing, JavaFX & SWT 3
G JavaFX NullPointerException bei Zugriff auf FXML Element AWT, Swing, JavaFX & SWT 0
P Event Handling Anfängerfrage: ActionEvent bekommt kein Zugriff auf Objekt AWT, Swing, JavaFX & SWT 3
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
B Zugriff auf JFrame obwohl die Klasse abgeleitet ist AWT, Swing, JavaFX & SWT 3
V JTable: Zugriff auf einzelne Zellen AWT, Swing, JavaFX & SWT 4
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
A Swing Zugriff auf JButton AWT, Swing, JavaFX & SWT 2
I Swing Zugriff auf ein Objekt AWT, Swing, JavaFX & SWT 2
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
M JTree mit eigenen Knoten - Zugriff auf Daten AWT, Swing, JavaFX & SWT 6
N zugriff auf frame AWT, Swing, JavaFX & SWT 5
N Swing Zugriff JButton auf JTree AWT, Swing, JavaFX & SWT 4
D Zugriff auf Instanz der GUI AWT, Swing, JavaFX & SWT 3
E Swing DB Zugriff mit JProgressBar?! AWT, Swing, JavaFX & SWT 8
R Zugriff auf Model im MVC-Design aus SwingWorker heraus AWT, Swing, JavaFX & SWT 3
H Zugriff JPanel AWT, Swing, JavaFX & SWT 3
D Swing Storage von / Zugriff auf und durch Actions AWT, Swing, JavaFX & SWT 5
S this-Zugriff auf Container höherer Ebene AWT, Swing, JavaFX & SWT 2
S Swing Zugriff auf Polyline in Grafik AWT, Swing, JavaFX & SWT 4
E Swing Zugriff auf Attribute eines JFrames über einen JDialog AWT, Swing, JavaFX & SWT 2
J Zugriff auf HtmlPanel sperren AWT, Swing, JavaFX & SWT 3
D JTree - Zugriff auf Nodes mit Object AWT, Swing, JavaFX & SWT 6
R Zugriff auf Component um addComponentListener() aufzurufen AWT, Swing, JavaFX & SWT 4
O Zugriff auf PreferenceStore aus der Business-Logik-Schicht? AWT, Swing, JavaFX & SWT 11
S NumberFormatException beim Zugriff auf Leeres JTextField AWT, Swing, JavaFX & SWT 8
S Zugriff auf statische Var in MouseEvent -> Warnung AWT, Swing, JavaFX & SWT 6
M Fehler beim Zugriff von awt-KeyListener auf swt-Shell AWT, Swing, JavaFX & SWT 2
S Zugriff auf Elemente funktioniert mit SWING nicht mehr AWT, Swing, JavaFX & SWT 5
X Zugriff auf "Oberparents" ? AWT, Swing, JavaFX & SWT 4
J JTextArea wird nicht aktualisiert bei Zugriff von außerhalb AWT, Swing, JavaFX & SWT 2
O DB-Zugriff + wie darstellen? AWT, Swing, JavaFX & SWT 6
F Problem bei Zugriff auf ComboBox Item AWT, Swing, JavaFX & SWT 4
G Zugriff auf JTextField AWT, Swing, JavaFX & SWT 2
J Zugriff auf "dynamisch erzeugte" JTextFields AWT, Swing, JavaFX & SWT 2
J Zugriff auf letzte Klasse AWT, Swing, JavaFX & SWT 4
M Zugriff auf Methoden aus einem ActionListener AWT, Swing, JavaFX & SWT 2
F Zugriff auf Oberfläche bzw Trennung GUI / Logik AWT, Swing, JavaFX & SWT 3
I selectedText: Wie bekomme ich Zugriff auf den Text? AWT, Swing, JavaFX & SWT 4
G Zugriff auf Bilder verweigern AWT, Swing, JavaFX & SWT 7
H Zugriff auf die Farbwerte eines Bildes AWT, Swing, JavaFX & SWT 6
G Zugriff auf TextField geht nicht AWT, Swing, JavaFX & SWT 5
G zugriff auf benutzeroberflächenelemente AWT, Swing, JavaFX & SWT 4
V Zugriff auf Components aus einem ActionListener AWT, Swing, JavaFX & SWT 3
M ActionListener-Zugriff durch mehrere Frames AWT, Swing, JavaFX & SWT 5
M Zugriff auf ComboBox! AWT, Swing, JavaFX & SWT 17
G Excel-Zugriff über POI: wohin mit dem Package? AWT, Swing, JavaFX & SWT 4
B Zugriff von Toolbar auf zugehörigen Frame AWT, Swing, JavaFX & SWT 6
O JTabbedPane - Zugriff auf die Elemente eines Tabs AWT, Swing, JavaFX & SWT 4
O JFileChooser - Zugriff auf Dateiname-Feld und Save-Button? AWT, Swing, JavaFX & SWT 6
E Zugriff auf JTextField nach Buttonklick AWT, Swing, JavaFX & SWT 6
F Variablen an eine Form binden? AWT, Swing, JavaFX & SWT 2
S JavaFX Variablen in einem FXML File verwenden AWT, Swing, JavaFX & SWT 8
L Auf Variablen zugreifen AWT, Swing, JavaFX & SWT 6
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
Paul15 ActionListener Variablen AWT, Swing, JavaFX & SWT 13
F MouseMotionListerener & Verfügbarkeit von Variablen AWT, Swing, JavaFX & SWT 5
B Event Handling MouseListener Behält seine Variablen, auch wenn ich ein neus Objekt erstelle AWT, Swing, JavaFX & SWT 2
T Einen Variablen Wert in einem TextField AWT, Swing, JavaFX & SWT 4
B Variable ist leer / Scope von Variablen AWT, Swing, JavaFX & SWT 2
P non-static variablen benutzen AWT, Swing, JavaFX & SWT 7
P Variablen in einem ActionListener zurücksetzen AWT, Swing, JavaFX & SWT 6
N Variablen in Events AWT, Swing, JavaFX & SWT 4
C SWT Textfeld mit festem und variablen Inhalt AWT, Swing, JavaFX & SWT 13
O Variablen an anonyme Funktion AWT, Swing, JavaFX & SWT 10
F Variablen zwischen Frames AWT, Swing, JavaFX & SWT 5
N Variablen an JDialog übergeben AWT, Swing, JavaFX & SWT 2
hdi Fenster mit variablen Components AWT, Swing, JavaFX & SWT 3
isowiz Wie kann ich Variablen aus einer Innerklasse heraus ändern? AWT, Swing, JavaFX & SWT 5
B Variablen-Namen erfragen AWT, Swing, JavaFX & SWT 5
A problem mit variablen und dialod AWT, Swing, JavaFX & SWT 2
N JLabel o.ä. mit Variablen verknüpfen AWT, Swing, JavaFX & SWT 10
S Wie Variablen Übergabe an Dialog?? AWT, Swing, JavaFX & SWT 2
M variablen uebergabe ?? AWT, Swing, JavaFX & SWT 2
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben