Eingabe in JTextField in Array speichern und in JList ausgeben

Genkin

Aktives Mitglied
Hallo,

ich möchte in ein JTextField Eingaben machen, in ein Array speichern (soll später noch für eine DB nutzbar sein, muss alles untereinander geschrieben sein) und in einer JList anzeigen.

Java:
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;

import java.awt.BorderLayout;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Scanner;
import java.awt.event.ActionEvent;

public class JTextInJList {

    private JFrame frame;
    private JTextField textField;
    private String[] liste;
    

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    JTextInJList window = new JTextInJList();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public JTextInJList() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 590, 411);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new BorderLayout(0, 0));
        
        DefaultListModel listModel = new DefaultListModel();
        JList list = new JList(listModel);

        
        
        frame.getContentPane().add(list, BorderLayout.CENTER);

        
        JButton reinda = new JButton("Hinzufügen");
        reinda.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                
                liste = new String[0];
            
                
                
                liste[0] = textField.getText();
                
                for(int i = 0; i < liste.length; i++) {
                    listModel.addElement(liste);
                }
                
                
                textField.setText("");
                

            }
        });
        frame.getContentPane().add(reinda, BorderLayout.WEST);
        
        JButton rausda = new JButton("Löschen");
        rausda.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        frame.getContentPane().add(rausda, BorderLayout.EAST);
        
        textField = new JTextField();
        frame.getContentPane().add(textField, BorderLayout.NORTH);
        textField.setColumns(10);
        

    }
}

Aber irgendwie klappt das ganze nicht
 
K

kneitzel

Gast
Also erst einmal wäre wichtig zu wissen, was nicht klappt und auch was Du denn genau erreichen willst.

Der ActionListener von Deinem Button kann so nicht funktionieren. Ein Array mit Größe 0 hat keine Elemente. Auf das erste Element mit Nr. 0 kannst Du also nicht zugreifen, da es das nicht gibt. Sollte also ein Array der Größe 1 sein, um dann auf Element 0 zugreifen zu können.

Da es nur ein Element gibt, ist die Schleife natürlich Unsinn, denn die Liste wird immer nur ein Element haben und da kann man direkt drauf zugreifen.
Ein Array mit nur einem Element braucht man auch nicht, da kann man das Element ja direkt nehmen.
Somit ändert sich der Code wohl zu:
Java:
reinda.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                String newEntry = textField.getText();
                listModel.addElement(newEntry);
                textField.setText("");
            }
        });
(Ungetestet und im Forum-Editor verfasst. Also möglicherweise typos und so drin.)

War das bereits das, was Du als "nicht funktionieren" bezeichnet hast? Oder war ich an einem Teil, zu dem Du noch nicht gekommen bist?
 

Genkin

Aktives Mitglied
In meinem Code wird in der Schleife „length“ nicht akzeptiert.

Ich will in ein Textfeld Daten eingeben, die dann in ein Array mit einer Spalte Zeile für Zeile gespeichert werden. Dieses Array wird später noch in einer DB verwendet. Die JList dient nur zur veranschaulichung des Arrays.

Mit jedem Mal wenn ich auf den Button „reinda“ drücke, soll der Inhalt den ich eingebe im Array gespeichert und in der Jlist angezeigt werden.

„Text 1“
„Text 2“
....

Soll alles untereinander stehen


EDIT: Also mit deinem Code krieg ich alles in der JList untereinander. Aber der String wird dann jedesmal umgeschrieben. Ich brauche daher ein String Array wo die vorherigen Eingaben gespeichert bleiben
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Also zum einen sind die Werte ja in der JList enthalten und können dort auch ausgelesen werden. Daher ist die Frage, ob du es noch einmal speichern musst....

Ansonsten ist ein Array schlecht, weil du da ja eine feste Größe angeben musst und die hast du ja nicht. Java bringt aber einiges an Datenstrukturen mit, die hier verwendet werden können. Aber dazu müsste man mehr wissen: ist die Reihenfolge wichtig? Dann hättest du also eine Liste -> List. Wenn die Reihenfolge egal ist, dann wäre es nur eine Menge -> Set.

Da findet sich bestimmt einige im Web zu.
Doku zu den genannten Interfaces wären:

Also Anwendung wäre fast identisch zur JList: du hast eine Instanz in deiner Klasse und die initialisierst du einmal und in jedem Händler fügst du da das Element hinzu.
 

Genkin

Aktives Mitglied
Danke für den Tipp. Hab das jetzt mal so gemacht. Habe jetzt nur das Problem, dass er in die Liste
Text 1
Text 1 Text 2
Text 1 Text 2 Text 3
schreibt

und in der JList
Text 1 Text 2 Text 3
Text 1 Text 2 Text 3
Text 1 Text 2 Text 3
ausgibt.

Ich will es in beiden gern so:
Text 1
Text 2
...

Liegt es vielleicht an textField.setText("") , dass der Inhalt des Textfeldes garnicht gelöscht wird sondern quasi nur "unsichtbar" ?

Java:
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;

import java.awt.BorderLayout;
import java.awt.Component;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Scanner;
import java.awt.event.ActionEvent;

public class JTextInJList {

    private JFrame frame;
    private JTextField textField;

    ArrayList<String> Liste = new ArrayList<>();

    


    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    JTextInJList window = new JTextInJList();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public JTextInJList() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 590, 411);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new BorderLayout(0, 0));
        
        DefaultListModel<ArrayList<String>> listModel = new DefaultListModel<ArrayList<String>>();
        JList<ArrayList<String>> list = new JList<ArrayList<String>>(listModel);

        
        
        frame.getContentPane().add(list, BorderLayout.CENTER);

        
        JButton reinda = new JButton("Hinzufügen");
        reinda.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                
                
                Liste.add(textField.getText());
                listModel.addElement(Liste);
                textField.setText("");
                
                
                System.out.println(Liste);
            }
        });
        frame.getContentPane().add(reinda, BorderLayout.WEST);
        
        JButton rausda = new JButton("Löschen");
        rausda.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        frame.getContentPane().add(rausda, BorderLayout.EAST);
        
        textField = new JTextField();
        frame.getContentPane().add(textField, BorderLayout.NORTH);
        textField.setColumns(10);
        

    }
}
 
K

kneitzel

Gast
Wieso fügst du denn die Liste dazu? Der Code bleibt gesund auf so, wie ich schon gepostet habe. Lediglich wird der String aus dem Textfeld nicht nur in der JList sondern auch noch in der neuen Liste hinzugefügt.
 

Genkin

Aktives Mitglied
Wieso fügst du denn die Liste dazu? Der Code bleibt gesund auf so, wie ich schon gepostet habe. Lediglich wird der String aus dem Textfeld nicht nur in der JList sondern auch noch in der neuen Liste hinzugefügt.

Aus deinem Code lese ich nur wie die Daten in die JList kommen.
Ich muss den Inhalt aber wie gesagt weiterverwenden und in eine DB schreiben. Wie kann ich denn alle Zeilen der JList ansprechen?


Ich brauche quasi eine Art "getAllElements" Befehl..

Oder ich erstelle halt ein Array, String[], List (was auch immer..) und sage jedesmal wenn ich den Button klicke, dass der Text in eine neue Zeile geschrieben wird...
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Hmm, ich denke, dass du einen Schritt nach dem Anderen gehen solltest. Du hast da aus meiner Sicht versucht, zwei Dinge auf einmal zu machen:
Zum einen hast du die Liste hinzugefügt und fügst die Elemente in die Liste ein. Das ist der erste Schritt, der hätte schon ausgereicht um die Elemente in der Liste und im JList zu haben.

Gleichzeitig hast du aber dann auch versucht, da mit dem DefaultListModel zu arbeiten. Prinzipiell OK, aber da hat sich dann ein Fehler eingeschlichen. Was willst du denn in der JList speichern? Doch nur einzelne Strings. Somit wäre meine Erwartungshaltung, dass du ein DefaultListModel<String> brauchst. Und dann fügst du da natürlich nicht immer die ganze Liste hinzu sondern natürlich nur den letzten String.

Und um an den Inhalt eine JList zu kommen,, kannst du dir immer das Model geben lassen. Das bietet Dir Zugriff auf alle Elemente. Aber da du ja jetzt das Model selbst erzeugst, hast du ja eine Instanz davon.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JTextField Eingabe in DB speichern AWT, Swing, JavaFX & SWT 68
R jTextField Eingabe überprüfen AWT, Swing, JavaFX & SWT 2
C Swing JTextfield hängt sich bei Eingabe auf AWT, Swing, JavaFX & SWT 6
R JTextField Eingabe bestimmen AWT, Swing, JavaFX & SWT 5
M Swing Eingabe auf JTextField automatisch ausgeben auf JLabel AWT, Swing, JavaFX & SWT 2
N Eingabe JTextfield überprüfen AWT, Swing, JavaFX & SWT 3
J Eingabe im JTextField übermitteln AWT, Swing, JavaFX & SWT 6
P Swing Einfache Eingabe in JTextfield wird nicht ausgegeben AWT, Swing, JavaFX & SWT 3
B Eingabe von JTextField verwenden AWT, Swing, JavaFX & SWT 10
U Swing Eingabe von JTextField in einen String übergeben. AWT, Swing, JavaFX & SWT 3
aze JTextField Eingabe verbergen AWT, Swing, JavaFX & SWT 14
A Die Eingabe in einem JTextField beschränken AWT, Swing, JavaFX & SWT 5
R JTextField Eingabe speichern AWT, Swing, JavaFX & SWT 4
hdi JTextField - Eingabe verschlüsselt anzeigen AWT, Swing, JavaFX & SWT 2
M jTextField mit Eingabe beschränken AWT, Swing, JavaFX & SWT 4
S JTextField - Eingabe speichern AWT, Swing, JavaFX & SWT 2
V JTextField - Mehrfachselektion und Eingabe möglich? AWT, Swing, JavaFX & SWT 2
I Prüfen einer Eingabe in JTextField, Fokusverlust AWT, Swing, JavaFX & SWT 2
C JTextField Eingabe prüfen AWT, Swing, JavaFX & SWT 4
L JTextField verweigert die Eingabe AWT, Swing, JavaFX & SWT 6
M JTextField nach erfolgreicher Eingabe leeren? AWT, Swing, JavaFX & SWT 2
Z immer Problem mit Eingabe durch JTextField und JTree AWT, Swing, JavaFX & SWT 7
J JTextfield Eingabe einschränken AWT, Swing, JavaFX & SWT 4
A JOptionPane OK ohne Eingabe abfangen AWT, Swing, JavaFX & SWT 10
B JavaFX TextField Eingabe in neues Fenster übernehmen AWT, Swing, JavaFX & SWT 4
F AWT awt KeyEvent - Zeichen direkt nach Eingabe löschen AWT, Swing, JavaFX & SWT 2
F JavaFX Tabelle mit gespeicherten Eingabe Werten AWT, Swing, JavaFX & SWT 8
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
L PasswordField Eingabe verstecken AWT, Swing, JavaFX & SWT 2
L TextField Eingabe in andere GUI übernehmen AWT, Swing, JavaFX & SWT 1
P Variable einer Eingabe in anderes Textfeld schreiben AWT, Swing, JavaFX & SWT 7
E Eingabe von Zahlen in TextArea AWT, Swing, JavaFX & SWT 2
V Swing Eingabe aus Textfeld abholen AWT, Swing, JavaFX & SWT 6
A Prüfung einer Eingabe auf Gleitkommazahl AWT, Swing, JavaFX & SWT 5
U Java FX Warten auf Textfield eingabe AWT, Swing, JavaFX & SWT 17
G JavaFX - Während AudioRecording keine Text eingabe TextField möglich AWT, Swing, JavaFX & SWT 6
P JTable - bei Eingabe Selektion AWT, Swing, JavaFX & SWT 0
U Eingabe von TextField in variable speichern AWT, Swing, JavaFX & SWT 2
D JavaFX Eingabe im GUI AWT, Swing, JavaFX & SWT 5
I JavaFX TextField auf Eingabe prüfen AWT, Swing, JavaFX & SWT 3
F JavaFX JavaFX HTMLEditor-Eingabe in Textarea als HTML anzeigen AWT, Swing, JavaFX & SWT 2
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
F Event Handling JTextArea auf bestimmte Eingabe reagieren (Return-Taste) AWT, Swing, JavaFX & SWT 2
J Text bei Eingabe löschen AWT, Swing, JavaFX & SWT 5
D JavaFX Textfeld Eingabe validieren AWT, Swing, JavaFX & SWT 5
A JTable Cell Eingabe AWT, Swing, JavaFX & SWT 6
X Eingabe in einem Ausgabefeld anzeigen lassen AWT, Swing, JavaFX & SWT 11
F Swing TextField Eingabe in Variable umwandeln um zum Beispiel zu rechnen. AWT, Swing, JavaFX & SWT 3
G JavaFX TextField Eingabe formatieren/einschränken AWT, Swing, JavaFX & SWT 2
S Swing JFormattedTextField - bei nicht korrekter Eingabe Inhalt überschreiben AWT, Swing, JavaFX & SWT 5
J Swing JButton durch Eingabe von Zahlen in JTextFields aktivieren AWT, Swing, JavaFX & SWT 3
A Auf eingabe warten AWT, Swing, JavaFX & SWT 5
S JTable - Auf spezielle Eingabe nicht reagieren. AWT, Swing, JavaFX & SWT 5
N Filternde Combobox in JTable verliert Fokus nach erster Eingabe AWT, Swing, JavaFX & SWT 2
maddin86 Eingabe in Textfeld 1 synchron in Textfeld 2 ausgeben AWT, Swing, JavaFX & SWT 9
M Swing JTable cell leeren bei Eingabe AWT, Swing, JavaFX & SWT 6
earlgrey_tea KeyEvent reagiert nicht auf Eingabe ("Pausentaste") AWT, Swing, JavaFX & SWT 11
T Tooltip bei falscher Eingabe anzeigen AWT, Swing, JavaFX & SWT 2
S SWT Wie bei Widget Text auf int prüfen bei Eingabe AWT, Swing, JavaFX & SWT 5
B Pop-Up eingabe für Zahlen AWT, Swing, JavaFX & SWT 5
X Eingabe in Textfeld soll Button aktivieren... AWT, Swing, JavaFX & SWT 12
S Eingabe Überprüfung AWT, Swing, JavaFX & SWT 4
S JTable: Eingabe nur für bestimmte Var.Typen zulassen AWT, Swing, JavaFX & SWT 13
P jframe eingabe durch button AWT, Swing, JavaFX & SWT 2
S Swing Auf Enter - Eingabe reagieren AWT, Swing, JavaFX & SWT 10
eskimo328 JTable nächste Zelle nach Eingabe einer Ziffer AWT, Swing, JavaFX & SWT 5
A Eingabe in JFrame AWT, Swing, JavaFX & SWT 4
G JTable - bei falscher Eingabe wird alter Wert genommen. AWT, Swing, JavaFX & SWT 2
N JFormattedTextField erst Verlassen, wenn Eingabe korrekt AWT, Swing, JavaFX & SWT 6
M Prüfen, ob in einem Textfeld/Tabelle eine Eingabe erfolgt is AWT, Swing, JavaFX & SWT 11
N Eingabe eines Textfields weiterverwenden AWT, Swing, JavaFX & SWT 6
A Bei Eingabe eines Datums ein Kalender aufpoppen lassen AWT, Swing, JavaFX & SWT 2
H Adressbuch - Problem beim Speichern der Eingabe AWT, Swing, JavaFX & SWT 5
M JFileChooser-> eingabe Vorgeben AWT, Swing, JavaFX & SWT 7
V Start Button und Wert Eingabe in ein Fenster AWT, Swing, JavaFX & SWT 2
M JTable: TableCellEditor nach Eingabe sofort beenden? AWT, Swing, JavaFX & SWT 3
B Textfeld, Rollbaken: Eingabe klappt nicht AWT, Swing, JavaFX & SWT 2
I Tastur eingabe geht nicht (wenn Button vorhanden) AWT, Swing, JavaFX & SWT 5
C jComboBox während eingabe kontextabhängig vorausfüllen AWT, Swing, JavaFX & SWT 3
K Textfeld Programm soll auf Eingabe warten! AWT, Swing, JavaFX & SWT 4
G Eingabe auslesen mit JOptionPane AWT, Swing, JavaFX & SWT 2
sparrow JComboBox soll Selektion anhand der Eingabe ändern AWT, Swing, JavaFX & SWT 2
S Eingabe des Textfeldes in Variable speichern AWT, Swing, JavaFX & SWT 7
H Eingabe von Zahlen in JTable und Fokusweitergabe AWT, Swing, JavaFX & SWT 4
W Auf eine Eingabe warten? AWT, Swing, JavaFX & SWT 2
R JTable, automatischer resize der Zellen nach einer Eingabe AWT, Swing, JavaFX & SWT 4
M Position von Eingabe-Fenster AWT, Swing, JavaFX & SWT 5
G GUI - Inhalte wechseln (Eingabe-Assistenten programmieren) AWT, Swing, JavaFX & SWT 2
G Textfeldgröße während Eingabe ändern AWT, Swing, JavaFX & SWT 4
S Eingabe einschränken bei TextField AWT, Swing, JavaFX & SWT 19
D Intelligente Eingabe AWT, Swing, JavaFX & SWT 3
W Auf Eingabe von Return reagieren AWT, Swing, JavaFX & SWT 4
F Eingabe in JPasswordField auf vier Zeichen beschränken AWT, Swing, JavaFX & SWT 3
chik Java Komponente mit formatierter Eingabe? AWT, Swing, JavaFX & SWT 5
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
I JTextfield senden über Enter AWT, Swing, JavaFX & SWT 1
H Swing Wie Fokus von JTextField entfernen? AWT, Swing, JavaFX & SWT 9
M mehrere jTextField untereinander AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben