DocumentListener

S

spitfire78

Gast
Hallo Community,

ich bin noch Anfänger und habe ein kleines Verständnisproblem.

Folgender Code:

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


public class GuiComponents extends JFrame implements ActionListener, ItemListener, DocumentListener {
	
	JFrame frame1;
	JButton button1;
	JButton button2;
	JButton button3;
	JCheckBox checkbox1;
	JRadioButton radio1;
	JRadioButton radio2;
	ButtonGroup group1;
	JLabel anzeige1;
	JTextField tf1;
	JTextArea ta1;
	
	//Konstruktor
	public GuiComponents () {
		
	//Frame erzeugen und anzeigen, Größe festlegen
	frame1 = new JFrame ("Rahmen");
	frame1.setLayout(new FlowLayout());
	frame1.setSize(500, 500);
	
	//Komponenten erzeugen
	button1 = new JButton ("Schalter 1");
	button2 = new JButton ("Schalter 2");
	button3 = new JButton ("Schalter 3");
	checkbox1 = new JCheckBox("Check1", true);
	radio1 = new JRadioButton("Radio1");
	radio2 = new JRadioButton("Radio2");
	group1 = new ButtonGroup();
	anzeige1= new JLabel("Anzeige");
	tf1 = new JTextField("Hallo Welt");
	ta1 = new JTextArea("Hallo Welt");
	
	//Radiobuttons gruppieren
	group1.add(radio1);
	group1.add(radio2);
	
	//Komponenten dem Frame zuordnen
	frame1.add(button1);
	frame1.add(button2);
	frame1.add(button3);
	frame1.add(checkbox1);
	frame1.add(radio1);
	frame1.add(radio2);
	frame1.add(anzeige1);
	frame1.add(tf1);
	frame1.add(ta1);
	
	
	
	//Komponenten mit Listener versehen
	button1.addActionListener(this);
	button2.addActionListener(this);
	button3.addActionListener(this);
	radio1.addItemListener(this);
	radio2.addItemListener(this);
	tf1.getDocument().addDocumentListener(this);
	ta1.getDocument().addDocumentListener(this);
	
	
	/*
	 WindowListener zum Fenster schließen. 
	 
	 Stichwort: anonyme Klassen
	 siehe: [url=http://www.dpunkt.de/java/Die_Sprache_Java/Objektorientierte_Programmierung_mit_Java/64.html]Anonyme Klassen[/url]
	 Hinter Bezeichner und Argumentenliste kann hier noch ei Klassenrumpf folgen. Ein Bezeichner ist nicht notwendig.
	 */
	
	WindowAdapter wa = new WindowAdapter() {
		  public void windowClosing (WindowEvent event) {
		    System.exit(0);
		  }
		};
		
	frame1.addWindowListener(wa);
	
	/*
	alternative Schreibweise
	
	frame1.addWindowListener(new WindowAdapter() {
		public void windowClosing (WindowEvent event) {
			System.exit(0);
		}
	});
	
	 */
	
	//Frame anzeigen
	frame1.setVisible(true);
	}
		
	/*
	implementieren der actionPerformed Methode: Diese dient zum Event-Handling
	des ActionListener.
	
	mit event.getSource() wird der zugehörige Button zurückgeliefert und im
	if-Statement wird geprüft, ob dieser Button geklickt wurde.	
	 */
	
	public void actionPerformed (ActionEvent event) {
		if (event.getSource() == button1) {
			anzeige1.setText(event.getActionCommand());
			System.out.println(anzeige1.getText());
		} else if (event.getSource() == button2) {
			System.out.println(event.getActionCommand());
		} else if (event.getSource() == button3) {
			System.out.println(event.getActionCommand());
		}
	}
	
	//implementieren des Item-Listeners für Radio-Buttons
	public void itemStateChanged (ItemEvent event) {
		if (event.getSource() == radio1) {
			System.out.println("Radio 1 ausgewählt" + event.getStateChange());
		} else if (event.getSource() == radio2) {
			System.out.println("Radio 2 ausgewählt" + event.getStateChange());
		} 
	}
	
}

Mir geht´s um die Zeilen 58 - 65. Dazu habe ich folgende Frage: In Zeile 59 adde ich einen ActionListener für button1. Dazu schreibe ich: button1.addActionListener(this). In Zeile 64 adde ich einen DocumentListener für tf1. Dazu schreibe ich: tf1.getDocument().addDocumentListener(this).

Wozu brauche ich hier getDocument()? Intuitiv hätte ich geschrieben tf1.addDocumentListener(this).

Ich würde mich über eine kurze Hilfestellung freuen.


spitfire78
 
M

Marcinek

Gast
Hallo,

das Textfield stellt ein Document, also ein Text, in einer bestimmten Weise dar.

Die Implementierungen sind hier entkoppelt, damit anderen Components ein Document in anderen Arten darstellen können.

Deswegen haben die Componentes nur eine Referenz auf das Document, das man sich hier mit getDocument holt und eben nicht an der Component enthalten ist.

Gruß,

Martin
 

Ähnliche Java Themen

Neue Themen


Oben