Input/Output GUI Eingabe in JTextfield in Variable speichern

stubborn

Mitglied
Hallo alle zusammen,

ich eigne mir zur Zeit eigentständig Java Kenntnisse an und möchte folgendes erreichen:

Nach Start des Programms wird ein Frame mit mehreren JTextField Komponenten angezeigt, in die der User was eintragen kann. Nach dem drücken der "Enter" Taste soll die Usereingabe in eine Variable gespeichert werden, sodass dem nachfolgenden Programm die Informationen im String-Format zur Verfügung stehen.
Versucht habe ich die Übergabe und anschliessende Konsolenausgabe mit einem ActionListener.

Mein Code sieht zur Zeit so aus:

Java:
import java.awt.*;
import java.text.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class GridLayoutDemo{

   public static void main(String[] args){

     JFrame f = new JFrame();
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     f.setLayout(new GridLayout (3,2,6,3));


     JTextField Surname = new JTextField();
     JLabel surname = new JLabel();
     String t = new String();

     ActionListener suname = new ActionListener(){
           @Override public void actionPerformed(ActionEvent e){
                t = surname.getText();
                System.out.println(t);
             }
     };

      surname.addActionListener(suname);

      f.add(Surname);
      f.add(surname);
  }
}

Beim ausführen erhalte ich folgende Fehlermeldung:
Unresolved compilation problem:
Cannot refer to a non-final variable t inside an inner class defined in a different method
Cannot refer to a non-final variable surname inside an inner class defined in a different method

Aber auf final kann ich die beiden nicht setzen, da ich diese doch verändern möchte.

Ich programmiere unter Ubuntu 12.04 mit Eclipse und JAVASe-1.6

Vielen dank schonmal im Vorraus für eure Hilfe
 

stubborn

Mitglied
Hi, danke für deine Hilfe.

Habe ich folgendermassen versucht:
Java:
import ...

public class GridLayoutDemo{
  String t = new String();
   
   public static void main (String[] args){ ...

das liefert mir dann die Fehlermeldungen :

Exception in thread "AWT-EventQueue-2" java.lang.Error: Unresolved compilation problems:
Cannot make a static reference to the non-static field t
Cannot refer to a non-final variable surname inside an inner class defined in a different method
Cannot make a static reference to the non-static field t


Probleme bereitet ihm die Zeile:
Java:
 t = surname.getText();

Wenn ich
Java:
 public static void main ...
in
Java:
 public static void main ... throws Exception
umändere, erhalte ich dennoch die Exception-Fehlermeldung.

Ein verschieben der Variablendeklaration von surname hilft ebenfalls nicht, liefert dann selbige Fehlermeldung wie für die String-Variable.
 

turtle

Top Contributor
ja, klar geht das nicht.

Eine static-Method (z.B. main) kann aufgerufen werden OHNE das ein Objekt instanziert worden ist.

Also kannst du aus main ebenfalls "nur" auf static Variable zugreifen oder musst ein Objekt in main erzeugen und dann darüber zugreifen.

Normalerweise erzeugt man in main() die notwendigen Objekte und greift auf deren Member-Variable über getter und setter zu.

Weiterhin macht es bei einem JLabel keinen Sinn einen ActionListener zu registrieren. Das geht auch gar nicht.
Möchtest du darauf reagieren, wenn mit der Maus drauf geklickt wird ist es ein MouseListener.

Hier mal mein Beispiel:
Java:
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class GridLayoutDemo {
	private JLabel surname;

	public GridLayoutDemo() {
		surname = new JLabel("Ein Test");
	}

	public JLabel getSurname() {
		return surname;
	}

	public static void main(String[] args) {
		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLayout(new GridLayout(3, 2, 6, 3));
		final GridLayoutDemo demo = new GridLayoutDemo(); 
		// Instanziert das Objekt und auch surname im Konstruktor

		final JLabel lblSurName = demo.getSurname();

		lblSurName.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
			}

			@Override
			public void mousePressed(MouseEvent e) {
			}

			@Override
			public void mouseExited(MouseEvent e) {
			}

			@Override
			public void mouseEntered(MouseEvent e) {
			}

			@Override
			public void mouseClicked(MouseEvent e) {
				String t = lblSurName.getText();
				System.out.println(t);
			}
		});
		f.add(lblSurName);
		f.pack();
		f.setVisible(true);
	}

}
 
Zuletzt bearbeitet:

stubborn

Mitglied
ja, klar geht das nicht.

Eine static-Method (z.B. main) kann aufgerufen werden OHNE das ein Objekt instanziert worden ist.

Also kannst du aus main ebenfalls "nur" auf static Variable zugreifen oder musst ein Objekt in main erzeugen und dann darüber zugreifen.

Ah, stimmt, hatte gar keinen Constructor :oops:

Weiterhin macht es bei einem JLabel keinen Sinn einen ActionListener zu registrieren. Das geht auch gar nicht.
Möchtest du darauf reagieren, wenn mit der Maus drauf geklickt wird ist es ein MouseListener.

Ne, das ist es nicht, was ich machen möchte.
Also, rechts soll in einem JLabel stehen, was in das Nebenstehende Feld, was ein JTextField ist, eingetragen werden soll. Beispiel:

Name : [Eingabefeld]

So, und das, was der User dann in das JTextField eingibt, soll in einer Variablen gespeichert werden. Oder ist das nach betätigung der Enter-Taste bereits in der JTextField-Variable/Objekt gespeichert (was ich allerdings nicht glaube) ?
Hier mal mein Beispiel:
Java:
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class GridLayoutDemo {
	private JLabel surname;

	public GridLayoutDemo() {
		surname = new JLabel("Ein Test");
	}

	public JLabel getSurname() {
		return surname;
	}

	public static void main(String[] args) {
		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLayout(new GridLayout(3, 2, 6, 3));
...

Danke für dein Beispiel, wenn ich das so ausführe, erhalte ich die Fehlermeldung:
Exception in thread main java.lang.NullPointerException at GridLayoutDemo.main (Line27),

was die Zeile:
Java:
 lblSurName.addMouseListener(new MouseListener(){
ist
 

stubborn

Mitglied
Danke für dein Beispiel, wenn ich das so ausführe, erhalte ich die Fehlermeldung:
Exception in thread main java.lang.NullPointerException at GridLayoutDemo.main (Line27),

was die Zeile:
Java:
 lblSurName.addMouseListener(new MouseListener(){
ist


Arg, war nur ein kleiner Tippfehler meinerseits, sorry. Dein Beispiel funzt.
 

turtle

Top Contributor
Du meinst das hier, oder?
Java:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class GridLayoutDemo {
	private JLabel lblSurName;
	private JTextField txtSurName;

	public GridLayoutDemo() {
		lblSurName = new JLabel("Ein Test");
		txtSurName = new JTextField();
	}

	public JLabel getSurname() {
		return lblSurName;
	}

	public JLabel getLblSurName() {
		return lblSurName;
	}

	public void setLblSurName(JLabel lblSurName) {
		this.lblSurName = lblSurName;
	}

	public JTextField getTxtSurName() {
		return txtSurName;
	}

	public static void main(String[] args) {
		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLayout(new GridLayout(3, 2, 6, 3));
		final GridLayoutDemo demo = new GridLayoutDemo();
		// Instanziert das Objekt und auch surname im Konstruktor

		final JLabel lblSurName = demo.getSurname();
		final JTextField txtSurName = demo.getTxtSurName();
		txtSurName.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String text = txtSurName.getText();
				lblSurName.setText(text);
			}
		});
		f.add(lblSurName);
		f.add(txtSurName);
		f.pack();
		f.setVisible(true);
	}
}
 

stubborn

Mitglied
Du meinst das hier, oder?

Ja, genau das meine ich :).
Habe mit deinem Programm ein wenig rumprobiert und nun verstanden, was warum und wie funktioniert und bei mir viel bloedsinn stand :)

Da die Funktionen getSurname und getLblSurName dasselbe tun, habe ich die Funktion getSurname weggelassen.

Java:
	public JLabel getSurname() {
		return lblSurName;
	}

	public JLabel getLblSurName() {
		return lblSurName;
	}

Vielen lieben Dank fuer deine Hilfe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Input/Output JTextField Eingabe in String Variable speichern Java Basics - Anfänger-Themen 15
D JTextField verwenden ohne Eingabe einer Variable Java Basics - Anfänger-Themen 4
M JTextField nur Zahleneingaben zulassen, eingabe sperren Java Basics - Anfänger-Themen 24
B Interface JTextField Eingabe als String verwenden Java Basics - Anfänger-Themen 3
P Eingabe aus JTextField/Area an eine andere Klasse übergeben. Java Basics - Anfänger-Themen 2
B jTextField bei Enter eingabe absenden? Java Basics - Anfänger-Themen 2
R Eingabe in JTextField speichern Java Basics - Anfänger-Themen 30
G Eingabe im jTextField auf Zahlen beschränken Java Basics - Anfänger-Themen 2
G JTextField nur Eingabe von Zahlen erlauben Java Basics - Anfänger-Themen 4
G JTextField Eingabe begrenzen? Java Basics - Anfänger-Themen 3
A eingabe von jTextField lesen und speicher Java Basics - Anfänger-Themen 5
S JTextfield auf Eingabe prüfen Java Basics - Anfänger-Themen 6
H eingabe jTextField in anderer Klasse prüfen Java Basics - Anfänger-Themen 5
G Eingabe in JTextField überprüfen Java Basics - Anfänger-Themen 5
Torschti Eingabe von Dezimalzahlen (bis zu zwei Kommastellen) Java Basics - Anfänger-Themen 11
T User input in Verbindung mit ChronoUnit anpassen und falls falsche Eingabe getätigtwird Java Basics - Anfänger-Themen 7
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
M Dialogbox sofort neustarten, falls aktuelle Eingabe falsch Java Basics - Anfänger-Themen 11
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
A Bei VierGewinnt Eingabe per Buchstabe (a,b,c...) Java Basics - Anfänger-Themen 2
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
J Mein Programm läuft bei der ersten Eingabe nicht mehr weiter, woran liegt das? Java Basics - Anfänger-Themen 6
M Eingabe limit Java Basics - Anfänger-Themen 8
brypa Programm mit Eingabe Java Basics - Anfänger-Themen 129
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
D falsche eingabe erkennen Java Basics - Anfänger-Themen 2
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
H For-Schleife bis Index von Eingabe laufen lassen Java Basics - Anfänger-Themen 24
Hamudi Bachir 2D Array eingabe vom Benutzer Java Basics - Anfänger-Themen 31
S Warum erscheint bei mir "Hallo Welt" und nicht die aktuelle Eingabe? Java Basics - Anfänger-Themen 16
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
B Array bei jeder Eingabe um eins erweitern Java Basics - Anfänger-Themen 3
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
chocobear26 Interface JOptionPane - Dialog_Fenster zeigt immer vorherige Eingabe an. Java Basics - Anfänger-Themen 4
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
K falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
N Eingabe erkennen, ob groß oder kleingeschrieben worden ist Java Basics - Anfänger-Themen 22
N Fehlerausgabe bei falscher Eingabe der Users Java Basics - Anfänger-Themen 3
N Eingabe des Users direkt hinter die Ausgabe Java Basics - Anfänger-Themen 3
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
M String array durch Eingabe begrenzen Java Basics - Anfänger-Themen 7
iman Eingabe von Benutzer Filter machen. Java Basics - Anfänger-Themen 7
D Eingabe einscannen, ohne vorher einen Datentypen anzugeben? Java Basics - Anfänger-Themen 1
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
H Eingabe Java Basics - Anfänger-Themen 7
F Bedingung für Eingabe Java Basics - Anfänger-Themen 2
K Durch eine Text eingabe etwas Ausführen Java Basics - Anfänger-Themen 5
Dimax Erste Schritte String Eingabe Prüfen Java Basics - Anfänger-Themen 11
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
B Türme von Hanoi mit einer beliebigen aber gültigen Eingabe lösen Java Basics - Anfänger-Themen 5
D While Schleife bei Bedarf durch Eingabe stoppen Java Basics - Anfänger-Themen 15
J Eingabe Einschränken Java Basics - Anfänger-Themen 1
Zrebna Compiler-Fehler Java-Compiler wird nach 'javac' keyword-Eingabe nicht gestartet (Erste Übung) Java Basics - Anfänger-Themen 18
A Datentypen Unterschiedliche Datentypen in einer Eingabe einlesen Java Basics - Anfänger-Themen 2
D Array via Eingabe befüllen Java Basics - Anfänger-Themen 6
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N Abbrechen einer Eingabe endet im Fehler Java Basics - Anfänger-Themen 3
S Konsolen eingabe Java Basics - Anfänger-Themen 17
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
x-tshainge Bei if (eingabe = = ... ) enter als eingabe nehemen Java Basics - Anfänger-Themen 4
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
S Eingabe in anderer Klasse verwenden Java Basics - Anfänger-Themen 3
T Input/Output Falsche Eingabe ausgeben Java Basics - Anfänger-Themen 3
R Ratespiel mit Return und einer Eingabe Java Basics - Anfänger-Themen 1
K Eingabe in Array speichern und Ausgeben Java Basics - Anfänger-Themen 9
J Eingabe des Scanners an einer bestimmten Position Java Basics - Anfänger-Themen 6
J Input/Output Den zweiten Output erst nach Eingabe ausgeben Java Basics - Anfänger-Themen 4
S Eingabe auf Richtigkeit und Reihenfolg überprüfen Java Basics - Anfänger-Themen 3
R Java CMD Eingabe verbergen Java Basics - Anfänger-Themen 4
L Eingabe überprüfen Java Basics - Anfänger-Themen 7
M Eingabe des Benutzers Verwenden Java Basics - Anfänger-Themen 9
T Input/Output Int Eingabe auf Zahl überprüfen Java Basics - Anfänger-Themen 30
S Method mit Eingabe abrufen Java Basics - Anfänger-Themen 1
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
M Erste Schritte primzahlen ermitteln, nur zahlen als eingabe erlauben Java Basics - Anfänger-Themen 34
K Überprüfen ob Eingabe ein Float ist Java Basics - Anfänger-Themen 4
G Warum funktioniert das Programm für negative Eingabe nicht? Java Basics - Anfänger-Themen 3
O Erste Schritte Eingabe anweisungen eliminieren Java Basics - Anfänger-Themen 3
G Objekt Instanziierung von Eingabe abhängig machen Java Basics - Anfänger-Themen 5
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
F Abfrage ob Eingabe eine Zahl ist Java Basics - Anfänger-Themen 3
H Alternative Eingabe Java Basics - Anfänger-Themen 3
L Bei falscher Eingabe soll NaN zurückgegeben werden, Rückgabetyp jedoch double Java Basics - Anfänger-Themen 3
J Methoden Eingabe Methode nur Buchstaben Java Basics - Anfänger-Themen 4
F Die Teilersumme einer Eingabe berechnen Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben