Java Textfeld?

2 Antworten

Werte aus einem Textfeld auszulesen geht via: 

JTextField#getText();

sowie das schreiben:

JTextField#setText(String value);

Du solltest gemäß deiner Datenmatrix eine weitere Matrix anlegen, in der du die Textfelder abspeicherst. mit den selben Maßen, also:

int[][] matrix = new int[9][9];

JTextField[][] textFields = new JTextField[9][9];

Da du wohl Swing benutzt, ist die Lösung hierfür leider nicht so schön wie mit FX.

Daher in Schritt 1: Schreiben von JTextField in deine Matrix: Hier sollte man in Swing einen Keylistener verwenden, da es ja nur um Tastatur-Eingaben geht.

Durch dieselbe Matrix kannst du nun leichter Referenzieren, welches Textfield zu welchem Wert aus deiner Matrix passt.

Beim Keylistener würde ich eine eigene Klasse verwenden, die diesen Implementiert. z.b. so:

class MyKeyListener implements KeyListener {

private int row; private int column; private JTextField textField;
public MyKeyListener(int row, int column, JTextField textField) { this.row = row; this.column = column; this.textField = textField; }
@Override public void keyTyped(KeyEvent e) { matrix[row][column] = Integer.parseInt(textField.getText()); }
@Override public void keyPressed(KeyEvent e) { }
@Override public void keyReleased(KeyEvent e) { } }

Beim Setzen der Listener sähe das so aus:

for (int row = 0; row < matrix.length; row++) {
    for (int col = 0; col < matrix[row].length; col++) {
        JTextField jtextField = new JTextField();
        jtextField.addKeyListener(new MyKeyListener(row, col, jtextField));
    }
}

In die Andere Richtung dürfte es deutlich leichter sein.

Wenn du von einem Wert aus deiner Matrix auf ein Textfeld referenzierst, ist dir die Position in der Matrix ja bekannt, also z.b:

int value = matrix[3][5];

Entsprechend weißt du über die Position auch, wo sich das Textfield befindet und kannst so den Wert direkt setzen:

textfields[3][5].setText(String.valueOf(value));

um den text aus den textfeldern zu kriegen empfehle ich dir einen DocumenListener, ein schönes Beispiel dafür gibt es hier http://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html

um die textfelder erstmal zu füllen kannst du die setText methode nutzen. Mehr dazu hier https://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html#setText(java.lang.String)

kleiner Tipp: Beim Programmieren immer schön in die API gucken dann findet man das meiste selbst heraus