Swing JTextArea während der Laufzeit füllen

Surras

Mitglied
Hi Leute,
mal wieder ein kleines Anfänger-Problem wo mir aber mal wieder der Weg zum Ziel fehlt. Folgende Situation: ich hab ein eingabefeld, wo ein String eingegeben werden kann (in meinem Beispiel eine Mathe-Aufgabe). mit einem JPanel geb ich aus ob die eingegebe Zahl richtig oder falsch ist.
jetz wirds allerdings knifflig. Darunter habe ich ein JTextArea aufgebaut, wo die eingegebenen Zahlen nacheinander aufgelistet werden sollen (also auch mit Zeilenumbruch).
Ich habe mir aus der API-Doku den 'Container' rausgesucht, und, nach eigenem Ideenreichtum, versucht mittels 'liste.add(eingabe, ergebnisliste);' Strings welche eingegeben werden dem Container hinzuzufügen.

Wie gebe ich jedoch das ganze nun im Textfeld aus? bzw. speichert der Container überhaupt meine Ergebnisse? Passenderweise müssten die Ergebnisse auch nur ausgegeben werden, wenn sie richtig eingetippt worden sind.

Hier mal mein Code wie weit ich bin:

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 18.03.2011
  * @author
  */
  
public class gui_test extends JFrame {
  // Anfang Attribute
  private JLabel aufgabe = new JLabel();
  private JNumberField eingabe = new JNumberField();
  private JButton knopf = new JButton();
  private JLabel richtig_falsch = new JLabel();
  private JTextArea ergebnisliste = new JTextArea("");
  private Container liste = new Container();

  // Ende Attribute

  public gui_test(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 380;
    int frameHeight = 284;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten

    aufgabe.setBounds(16, 16, 67, 24);
    aufgabe.setText("3 + 3 = ");
    aufgabe.setFont(new Font("MS Sans Serif", Font.PLAIN, 18));
    cp.add(aufgabe);
    eingabe.setBounds(96, 11, 121, 32);
    eingabe.setText("");
    eingabe.setFont(new Font("MS Sans Serif", Font.PLAIN, 18));
    cp.add(eingabe);
    knopf.setBounds(240, 10, 91, 33);
    knopf.setText("OK!");
    knopf.setMargin(new Insets(2, 2, 2, 2));
    knopf.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        knopf_ActionPerformed(evt);
      }
    });
    knopf.setFont(new Font("MS Sans Serif", Font.PLAIN, 18));
    cp.add(knopf);
    richtig_falsch.setBounds(40, 64, 256, 32);
    richtig_falsch.setText("(richtig oder falsch)");
    richtig_falsch.setFont(new Font("MS Sans Serif", Font.BOLD, 23));
    richtig_falsch.setVisible(false);
    cp.add(richtig_falsch);
    ergebnisliste.setBounds(8, 112, 337, 113);
    ergebnisliste.setText("");
    ergebnisliste.setLineWrap(true);
    ergebnisliste.setEditable(false);
    ergebnisliste.addCaretListener(new CaretListener() {
      public void caretUpdate(CaretEvent evt) {
        ergebnisliste_CaretUpdate(evt);
      }
    });
    cp.add(ergebnisliste);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Methoden
  public void knopf_ActionPerformed(ActionEvent evt) {
   String temp = eingabe.getText();
  
    if (temp.equals("6")) {
      richtig_falsch.setText("RICHTIG!");
      richtig_falsch.setVisible(true);
      liste.add(temp,ergebnisliste);

    } else {
      richtig_falsch.setText("FALSCH!");
      richtig_falsch.setVisible(true);
    }
  }

  public void ergebnisliste_CaretUpdate(CaretEvent evt) {



  }

  // Ende Methoden

  public static void main(String[] args) {
    new gui_test("gui_test");
    
  }
}

hoffe ich habs nicht zusehr vermurkst ???:L???:L
 
Du möchtest einfach nur etwas der JTextArea hinzufügen? Das geht per JTextArea.html#append(java.lang.String):
[JAVA=83] if (temp.equals("6")) {
richtig_falsch.setText("RICHTIG!");
richtig_falsch.setVisible(true);
ergebnisliste.append(temp);
ergebnisliste.append(System.getProperty("line.separator"));
}[/code]

Der Ansatz mit Container ist zu sehr vermurkst. 😀
 
Hey!

Ich weiß nicht wofür du den Container brauchst.
Habe ne kleine Änderung im Code vorgenommen.

Java:
 // Anfang Methoden
  public void knopf_ActionPerformed(ActionEvent evt) {
   String temp = eingabe.getText();
  
    if (temp.equals("6")) {
      richtig_falsch.setText("RICHTIG!");
      richtig_falsch.setVisible(true);
      ergebnisliste.append(temp + "\n");
 
    } else {
      richtig_falsch.setText("FALSCH!");
      richtig_falsch.setVisible(true);
    }
  }

Geänder habe ich ergebnisliste.append(temp + "\n");.
Hier wird das neue Ergebnis an die JTextArea drangehängt "append". Dahinter setze ich noch einen manuellen Zeilenumbruch, so wird das nächste Ergebnis in der nächsten Zeile angehängt..
 
Du möchtest einfach nur etwas der JTextArea hinzufügen? Das geht per JTextArea.html#append(java.lang.String):
[JAVA=83] if (temp.equals("6")) {
richtig_falsch.setText("RICHTIG!");
richtig_falsch.setVisible(true);
ergebnisliste.append(temp);
ergebnisliste.append(System.getProperty("line.separator"));
}[/code]

Der Ansatz mit Container ist zu sehr vermurkst. 😀

Da war jemand schneller, aber haben ja beide den gleichen Lösungsansatz 😉
 
ah, oha die append-methode hatte ich echt nicht bemerkt. Naja wies halt oft so kommt ist der leichteste Weg der richtige ^.^

Mit dem Container war das nur so eine Idee das ich dort die ganzen Strings zwischenspeichere, aber scheint ja wohl nicht nötig zu sein ^^"

Vielen Dank für die Hilfe! Thema hat sich damit erledigt 😛
 

Neue Themen


Zurück
Oben