Buttons/Schaltfläche aktivieren/deaktivieren

sauerpeter

Grünschnabel
Hallo Zusammen,
bin neu hier und will auch gleich mal meine erste Frage stellen - die Suchfunktion ergab leider nichts brauchbares.

Ich habe ein Formular.
In diesem müssen Felder ausgefüllt werden.
Am Ende soll das alles gespeichert werden.

Jetzt mal zu der Frage:
Ist ein Feld, bsp. Name, nicht ausgefüllt, darf der Button "senden" oder "speichern" nicht aktiv sein, erst wenn ALLE Felder ausgefüllt sind.

Wie mach ich das?
Ich denke mal mit einer if-Anweisung und setVisible(true), setVisible(false). Aber wie genau, das weiß ich leider nicht. Könnt ihr mir bitte helfen******

Danke!
sauerpeter
 
Hallo sauerpeter,

du könntest beispielsweise allen JTextFields einen KeyListener hinzufügen und dort dann jeweils den Text der anderen Textfeldern prüfen. So könntest du zusätzlich auch noch auf "sinnvolle" Einträge prüfen.
Für Aktivierung/Deaktivierung der Buttons verwendest du setEnabled(true/false)

Gruß
 
Minimalstbeispiel, das das Prinzip verdeutlichen sollte.

Java:
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Test
{

	public static void main(String[] args) throws IOException
	{
		JFrame frm = new JFrame();
		JPanel pnl = new JPanel();
		frm.add(pnl);
		final JButton btn1 = new JButton("test");
		btn1.setEnabled(false);
		final JTextField tfd1 = new JTextField();
		final JTextField tfd2 = new JTextField();
		tfd1.setPreferredSize(new Dimension(200, 50));
		tfd2.setPreferredSize(new Dimension(200, 50));

		tfd1.addKeyListener(new KeyListener()
		{

			@Override
			public void keyTyped(KeyEvent e)
			{
			}

			@Override
			public void keyReleased(KeyEvent e)
			{
				if (!tfd1.getText().equals("") && !tfd2.getText().equals(""))
				{
					btn1.setEnabled(true);
				}
				else
				{
					btn1.setEnabled(false);
				}

			}

			@Override
			public void keyPressed(KeyEvent e)
			{

			}
		});

		tfd2.addKeyListener(new KeyListener()
		{

			@Override
			public void keyTyped(KeyEvent e)
			{
				// TODO Auto-generated method stub

			}

			@Override
			public void keyReleased(KeyEvent e)
			{
				if (!tfd1.getText().equals("") && !tfd2.getText().equals(""))
				{
					btn1.setEnabled(true);
				}
				else
				{
					btn1.setEnabled(false);
				}

			}

			@Override
			public void keyPressed(KeyEvent e)
			{
				// TODO Auto-generated method stub

			}
		});

		pnl.add(btn1);
		pnl.add(tfd1);
		pnl.add(tfd2);

		frm.pack();
		frm.setVisible(true);
	}
}
 
Aber der KeyListener ist doch hauptsächlich dafür da, das etwas passiert, wenn man einen Button drückt.
Dies wäre ja erst mein nächster Schritt.
Aktuell geht es mir nur darum, das ein Button inaktiv bleibt, wenn ein Textfeld zum Beispiel nicht ausgefüllt wurde. Weil es dann als Beispiel nichts zum senden/speichern/etc. gibt.
 
Nee läuft noch nicht:

Krieg Fehlermeldung:
Access restriction: The type JButton is not accessible due to restriction on required library C:\Program
Files (x86)\Java\jre7\lib\rt.jar

Irgendwas stimmt mit den Imorten anscheinend nicht. Bin grad dabei das zu lösen :)
 
Ich verwende noch Java 6, wäre mir aber neu, wenn das zu Problemen mit simplen Swing imports führen sollte.

1. Schnellschuss: Lösche alle imports und lass deine IDE die nochmal neu importieren... (da sollte aber eigtl das gleiche bei rauskommen, die Swing API Pakete haben sich ja schließlich nicht geändert)
2. Schnellschuss: Wenn du Eclipse verwendest, unter Window -> Preferences -> Java -> Compiler -> Errors/Warnings die access rule "Forbidden reference" von error auf warning stellen. Das sollte aber wirklich nur eine Übergangslösung sein.

Mir ist so dieser Fehler noch nicht untergekommen, bin aber auch kein "alter Hase" :)
 
Ich verwende noch Java 6, wäre mir aber neu, wenn das zu Problemen mit simplen Swing imports führen sollte.

1. Schnellschuss: Lösche alle imports und lass deine IDE die nochmal neu importieren... (da sollte aber eigtl das gleiche bei rauskommen, die Swing API Pakete haben sich ja schließlich nicht geändert)
2. Schnellschuss: Wenn du Eclipse verwendest, unter Window -> Preferences -> Java -> Compiler -> Errors/Warnings die access rule "Forbidden reference" von error auf warning stellen. Das sollte aber wirklich nur eine Übergangslösung sein.

Mir ist so dieser Fehler noch nicht untergekommen, bin aber auch kein "alter Hase" :)

Ah ok, das funktioniert jetzt erstmal.
Soweit so gut.

Das Bsp. beinhaltet ja den Vergleich, ob die beiden eingegebenen Strings gleich sind oder nicht.
Wen ich nur ein Wort habe, also ohne Vergleich, dann würde es doch sicher nicht reichen oder?
 
Ah ok, das funktioniert jetzt erstmal.
Soweit so gut.

Das Bsp. beinhaltet ja den Vergleich, ob die beiden eingegebenen Strings gleich sind oder nicht.
Wen ich nur ein Wort habe, also ohne Vergleich, dann würde es doch sicher nicht reichen oder?

Ah, jetzt geht mir ein Licht auf - mit equals!:-:)-:)-:)-(
Jetzt versteh ich.

Vielen Dank für deine Hilfe. Hat mir wirklich geholfen!
 
Zurück