Hallo,
ich hätte in meiner GUI gerne eine Art "Logger". Ich stelle mir das so vor, dass der Benutzer in der GUI über eine JTextArea darüber informiert wird, was die Anwendung gerade im Hintergrund macht.
Das Problem ist allerdings, dass bei folgendem Code die Zahlen 1-10 aus der zaehle()-Methode leider nicht nach und nach in der Textarea angezeigt werden, sondern erst nach kompletten Durchlauf der Methode.
Das Problem scheint hierbei beim ActionListener zu liegen, da bei folgendem Code, wo es keinen ActionListener gibt, die Zahlen 1-10 nacheinander in der Textarea erscheinen
Meine Frage ist nun, wie kann ich es hinbekommen, dass mit dem ActionListener in der Textarea nach jedem Durchlauf der zaehle()-Methode meine Textarea aktualisiert wird? Also so wie es in dem zweiten Beispiel funktioniert, nur das hier eben kein ActionListener zum Einsatz kommt.
Ich hoffe ihr versteht was ich meine.
Vielen Dank schonmal
ich hätte in meiner GUI gerne eine Art "Logger". Ich stelle mir das so vor, dass der Benutzer in der GUI über eine JTextArea darüber informiert wird, was die Anwendung gerade im Hintergrund macht.
Das Problem ist allerdings, dass bei folgendem Code die Zahlen 1-10 aus der zaehle()-Methode leider nicht nach und nach in der Textarea angezeigt werden, sondern erst nach kompletten Durchlauf der Methode.
Java:
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
public class FrameStarter extends JFrame {
private JTextArea textArea = new JTextArea();
private JLabel lbl = new JLabel("Hallo Welt");
private JButton btn = new JButton("Button");
public FrameStarter() {
this.setLayout(new GridLayout(2, 1));
textArea.setPreferredSize(new Dimension(300, 200));
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btn) {
System.out.println("Test");
machEtwas();
}
}
});
this.add(lbl);
this.add(textArea);
this.add(btn);
this.pack();
this.setVisible(true);
}
public void machEtwas() {
AktionNeu aktion = new AktionNeu(textArea);
aktion.zaehle();
}
public static void main(String[] args) {
FrameStarter frameStarter = new FrameStarter();
// frameStarter.machEtwas();
}
}
class AktionNeu {
JTextArea textArea;
public AktionNeu(JTextArea textarea) {
this.textArea = textarea;
}
public void zaehle(){
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(1000);
textArea.setText(textArea.getText() + "\r\n" + "Zeile: " + i);
// repaint();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Das Problem scheint hierbei beim ActionListener zu liegen, da bei folgendem Code, wo es keinen ActionListener gibt, die Zahlen 1-10 nacheinander in der Textarea erscheinen
Java:
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
public class FrameStarter extends JFrame {
private JTextArea textArea = new JTextArea();
private JLabel lbl = new JLabel("Hallo Welt");
private JButton btn = new JButton("Button");
public FrameStarter() {
this.setLayout(new GridLayout(2, 1));
textArea.setPreferredSize(new Dimension(300, 200));
// btn.addActionListener(new ActionListener() {
//
// @Override
// public void actionPerformed(ActionEvent e) {
// if (e.getSource() == btn) {
// System.out.println("Test");
// machEtwas();
// }
// }
// });
this.add(lbl);
this.add(textArea);
this.add(btn);
this.pack();
this.setVisible(true);
}
public void machEtwas() {
AktionNeu aktion = new AktionNeu(textArea);
aktion.zaehle();
}
public static void main(String[] args) {
FrameStarter frameStarter = new FrameStarter();
frameStarter.machEtwas();
}
}
class AktionNeu {
JTextArea textArea;
public AktionNeu(JTextArea textarea) {
this.textArea = textarea;
}
public void zaehle(){
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(1000);
textArea.setText(textArea.getText() + "\r\n" + "Zeile: " + i);
// repaint();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Meine Frage ist nun, wie kann ich es hinbekommen, dass mit dem ActionListener in der Textarea nach jedem Durchlauf der zaehle()-Methode meine Textarea aktualisiert wird? Also so wie es in dem zweiten Beispiel funktioniert, nur das hier eben kein ActionListener zum Einsatz kommt.
Ich hoffe ihr versteht was ich meine.
Vielen Dank schonmal
Zuletzt bearbeitet von einem Moderator: