Aktivierung eines Buttons nach Eingabe in Textfeldern (DocumentListener)

jonas.r

Mitglied
Hallo,
ich habe schon eine längere Zeit in google und auch hier nach einer Lösung für mein Problem gesucht, und würde mich sehr freuen, wenn hier mir eine/r weiterhelfen kann.=)

Und zwar habe ich 3 Textfelder und einen Button in einem JFrame. Der Button aber soll erst aktiviert werden, wenn in allen 3 Feldern eine Eingabe erfolgt ist. Der Button ist zu Anfang auch deaktiviert, wird aber schon nach einer Eingabe in einem Textfeld wieder aktiviert.

Hier der Quellcode (Ich versuche nur die erforderlichen Teile raus zu extrahieren):
Java:
package de.jonas.stromkostenrechner;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class NeuesGerätFenster extends JFrame implements ActionListener{

	private static final long serialVersionUID = 1L;

	JTextField 	    eingabename, 
				eingabeverbrauch, 
				eingabelaufzeit
				;
	
	JButton erzeugegerät;

	//(weitere Initialisierungen hab ich rausgenommen)
		
			
	NeuesGerätFenster (){
		setTitle(überschriftt);
		setSize(breiteFrame, höheFrame);
		setLocationRelativeTo(null);
		setVisible(true);
		setResizable(false);
		setLayout(null);
		setAlwaysOnTop(false);
		Color c = new Color (255, 255, 255);
		getContentPane().setBackground(c);
				
		eingabename = new JTextField();
		eingabename.setBounds(xposENTextF, höhe1, allgemeineLänge, allgemeinehöhe);
		eingabename.setText("");
		eingabename.addActionListener(this);
		eingabename.getDocument().addDocumentListener(new TextfeldListener());
		add(eingabename);

		eingabeverbrauch = new JTextField();
		eingabeverbrauch.setBounds(xposEVTextF, höhe2, allgemeineLänge, allgemeinehöhe);
		eingabeverbrauch.addActionListener(this);
		eingabeverbrauch.getDocument().addDocumentListener(new TextfeldListener());
		eingabeverbrauch.setText("");
		add(eingabeverbrauch);

		eingabelaufzeit = new JTextField();
		eingabelaufzeit.setBounds(xposELTextF, höhe3, allgemeineLänge, allgemeinehöhe);
		eingabelaufzeit.addActionListener(this);
		eingabelaufzeit.getDocument().addDocumentListener(new TextfeldListener());
		eingabelaufzeit.setText("");
		add(eingabelaufzeit);
		
		erzeugegerät = new JButton ("Gerät speichern");
		erzeugegerät.setFont(fontbutton);
		erzeugegerät.setBounds(xposEGButton, höhe4, längeButton, allgemeinehöhe);
		erzeugegerät.addActionListener(this);
		erzeugegerät.setEnabled(false);
		add(erzeugegerät);

	}
	
	
	class TextfeldListener implements DocumentListener{

		public void changedUpdate(DocumentEvent e) {
			update();
			
		}

		public void insertUpdate(DocumentEvent e) {
			update();
			
		}

		public void removeUpdate(DocumentEvent e) {
			update();
			
		}
	
		public void update(){
			String leer= "";
			String TF1=eingabename.getText();
			String TF2=eingabeverbrauch.getText();
			String TF3=eingabelaufzeit.getText();
			
			if((TF1 != leer) && (TF2 != leer) && (TF3 != leer)){
				erzeugegerät.setEnabled(true);
			}
			else{
				erzeugegerät.setEnabled(false);
			}
		}	
		
	}
	
}
 
Code:
setVisible(true);
beim JFrame immer erst zum Schluss, wenn alle Komponenten hinzugefügt wurden.
 
Ja klar... Müsst ich eigentlich draus gelernt haben, weil ich das Problem auch letzten schon hatte.. Doof..

Habs jetzt so gemacht und es Funktioniert, danke!:toll:
Java:
		public void update(){
			String TF1=eingabename.getText();
			String TF2=eingabeverbrauch.getText();
			String TF3=eingabelaufzeit.getText();
			
			if(!(TF1.isEmpty()) && !(TF2.isEmpty()) && !(TF3.isEmpty()) ){
				erzeugegerät.setEnabled(true);
			}
			else{
				erzeugegerät.setEnabled(false);
			}
		}
 

Neue Themen


Zurück
Oben