AWT Anfänger

Klösp

Aktives Mitglied
Hallo zusammen,

ich bin Anfänger was GUIs bzw AWT angeht und hätte da mal ein paar Fragen:

Mein Code:
Java:
package packageOne;

import java.awt.Button;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import java.awt.HeadlessException;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MyFrame extends Frame {
		Button button1;
	

	public MyFrame() {
		super.setTitle("TestFrame");
		super.setBounds(0, 0, 200, 200);
		super.setVisible(true);
		button1 = new Button();
		button1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Test");
				button1.setSize(getWidth()/2, getHeight()/2);
				
			}
		});
		button1.setVisible(true);
		super.add(button1);
		
		final Button button2=new Button();
		button2.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				System.out.println("Test");
				button2.setSize(getWidth()/2, getHeight()/2);				
			}
			
		});
		button2.setVisible(true);
		add(button2);	
	}
}

Hab dann noch eine Testklasse, wo in der Main-Methode einfach ein neues MyFrame erzeugt wird.


Frage 1:
Was mir nicht klar ist, wieso muss ich button1 wie im ersten Fall als Instanzvariable deklarieren, oder aber wie bei button2 im Konstruktor, aber dann final?
Wieso muss button2 dann final sein, damit ich aus der anonymen Kindklasse von ActionListener darauf zugreifen darf?

(wieso funktiniert das eigentlich nur einmal (das verkleinern des Buttons)?)

Frage 2:
Wie wird es richtig gemacht, wenn ich wie oben auf Kompnenten des Frames zugreifen will?

Frage 3:

Wie bekomme ich das selbe hin wenn ich keinen anonyme Kindklasse schreibe, sonder z.B eine eigenen AdaperKlasse.
z.B

Java:
package packageOne;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ActonListenerAdapter implements ActionListener {

	public ActonListenerAdapter() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.print("Test2");
		System.exit(0);

	}

}

oder geht das nur indem ich ActionListenerAdapter als normale innere Klasse in MyFrame definiere?



Vielen Dank im Vorraus
 

Gucky

Top Contributor
Wenn du von einer anderen Klasse auf deinen Button zugreifen willst, dann kannst du die Instanzvariable des Buttons übergeben oder eine Instanz der GUI Klasse und dann darüber auf den Button zugreifen.

Wenn du den Button im Konstruktor deklarierst, dann ist die Instanz nur dort erreichbar außerhalb existiert er nicht. Mach mal lieber immer eine Instanzvariable oben in der Klasse.
 

Klösp

Aktives Mitglied
Hallo und danke,

Für den ersten Fall meinst du vermutlich so etwas in der Art!?

Java:
public class MyFrame extends Frame {

		Button button3;

	public MyFrame() {
		super.setTitle("TestFrame");
		super.setBounds(0, 0, 200, 200);
		super.setVisible(true);
		button3=new Button();
		button3.addActionListener(new ActonListenerAdapter(button3));
		button3.setVisible(true);
		add(button3);
		}
	}

Java:
public class ActonListenerAdapter implements ActionListener {
	Button button;
	
	public ActonListenerAdapter(Button button) {
		this.button=button;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("Test3");		
		button.setSize(button.getWidth()/2, button.getHeight()/2);
	}
}

Das funktioniert jetzt wieso auch immer sogar wenn ich mehrmals klicke.

Bei der zweiten Möglichkeit (wenn ich dich richtig verstanden habe) ergibt sich folgendes Problem:

Das könnte dann ja z.B. so aussehen:
Java:
public class ActonListenerAdapter implements ActionListener {
	MyFrame myframe;
	
	public ActonListenerAdapter(MyFrame myframe) {
		this.myframe=myframe;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("Test3");		
		myframe.button3.setSize(button.getWidth()/2, button.getHeight()/2);
	}
}

Das Problem ist, dass ich irgendwo den Konstruktor von Myframe aufrufen muss und das führt dann (in meinem Beispiel) zur Rekursion. Soviele Fenster wollte ich eigentlich gar nicht öffnen:)

Das führt mich aber zu noch einer Frage.
Wie kann ich ein geöffnetes Frame wieder vernünftig schließen.
Einfach auf x drücken macht nix.
Hatte gedacht man könnte das eventuell so machen:
Java:
addWindowListener(new WindowAdapter(){
			public void close(WindowEvent e){
				e.getWindow().dispose();
			}
		});

Das tuts aber auch noch nicht.
Will aber wirklich nur das Fenster schließen.

@Fab1
Nein, muss ich nicht. Wollte mir nur mal etwas zu GUIs angucken und hab mir AWT rausgepickt.
Sind andere Pakete da eventuell besser bzw. besser für den Anfang?


Danke im Vorraus
 

Klösp

Aktives Mitglied
Das mit dem Fenster schließen hat sich erledigt.
Ich hätte die Methode windowClosing() überschreiben müssen.
 
Zuletzt bearbeitet:

Fab1

Top Contributor
Swing basiert auf AWT. Meines Wissens wurden dort viele "Fehler" oder Umständlichkeiten behoben. AWT nutzt soweit fast keiner mehr man setzt auf Swing bzw. JavaFX

aber ist momentan auch nicht schlimm im Layout Bereich ist es vor allem wichtig, dass du weißt was Listener sind und wie man LayoutManager verwendet, der Rest ist Nebensache.
 

dzim

Top Contributor
Naja, ich würde dennoch nicht mehr auf ein "totes Pferd" setzen - AWT ist schon lange tot, Swing spätestens seit ORacle keine Updates mehr dafür liefert und die ganze Entwicklung in JavaFX steckt.
Bevor du dich also hier auf ein veraltetes Framework einarbeitest, würde ich lieber auf ein anderes setzen. Da du noch ein Neuling in AWT bist, wäre es also auch kein Verlust.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Paty JFrame anfänger bräuchte hilfestellung AWT, Swing, JavaFX & SWT 7
N 3D Games anfänger AWT, Swing, JavaFX & SWT 10
C Swing AWT GUI Anfänger Aufgabe AWT, Swing, JavaFX & SWT 7
S Hilfe bei Java Gui Anfänger AWT, Swing, JavaFX & SWT 5
I Erste Desktop Software - blutiger Anfänger AWT, Swing, JavaFX & SWT 4
R Flickr-Flickr4Java Anfänger AWT, Swing, JavaFX & SWT 2
D [Anfänger]ComboBox erstellt Einträge in einer anderen ComboBox AWT, Swing, JavaFX & SWT 3
J GUI Anfänger einfaches Program AWT, Swing, JavaFX & SWT AWT, Swing, JavaFX & SWT 3
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
M JFrame - Anfänger, kurze Erklärung AWT, Swing, JavaFX & SWT 5
G Swing anfänger AWT, Swing, JavaFX & SWT 2
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
K Swing SwingGUI - Erstellen für Anfänger AWT, Swing, JavaFX & SWT 15
P Anfänger Problem AWT, Swing, JavaFX & SWT 8
2 Anfänger problem: Buttenklick soll reagieren AWT, Swing, JavaFX & SWT 9
S Button Größe - Anfänger AWT, Swing, JavaFX & SWT 13
S Anfänger - JFrame/JLabel nicht sichtbar AWT, Swing, JavaFX & SWT 5
R Panel dupliziert sich und Textboxes werden nicht angezeigt [Anfänger] AWT, Swing, JavaFX & SWT 6
K GUI-Hilfe für Anfänger AWT, Swing, JavaFX & SWT 15
P Stack Anfänger AWT, Swing, JavaFX & SWT 8
R AWT [Anfänger] Darstellungsfehler bei Größenändereung einese Fensters AWT, Swing, JavaFX & SWT 2
R AWT [Anfänger] keine atives Aussehen von Buttons AWT, Swing, JavaFX & SWT 4
R AWT [Anfänger] Radio Buttons NetBeans 6.7.1 AWT, Swing, JavaFX & SWT 2
S Anfänger: Layoutproblem ! AWT, Swing, JavaFX & SWT 3
P Anfänger Probleme mit JTable bitte um Rat! AWT, Swing, JavaFX & SWT 5
E Anfänger-JPanel aus Menü aufrufen AWT, Swing, JavaFX & SWT 4
B Anfänger: Panel bei Button Klick anzeigen? AWT, Swing, JavaFX & SWT 4
L Design-Probleme (Swing-Anfänger) AWT, Swing, JavaFX & SWT 6
B GUI Anfänger -> Versionsunterschiede in Swing 1.5 / 1.4 . AWT, Swing, JavaFX & SWT 27

Ähnliche Java Themen

Neue Themen


Oben