Hey Leute,
ich habe auf meiner Oberfläche eine JTextArea zu deren Document ich einen DocumentListener hinzugefügt habe. Nun möchte ich eine andere JTextArea dazu bringen, diese Events zu verarbeiten, so dass die TextAreas immer den gleichen Inhat haben. Ist das möglich? Für andere Events gibt es ja immer die processXYZEvent() - Methoden, aber für DocumentEvents hab ich keine gefunden.
Das ganze soll nachher über Sockets auf einem Server benutzt werden, aber das ist für das Problem eher (denke ich) eher unwichtig, weil das genauso funktionieren würde wie wenn ich die unabhängig voneinander in demselben Frame laufen lasse.
Ich stelle mir das ungefähr so vor:
Kann mir da jemand helfen? Oder bin ich ganz auf einer falschen Fährte? Ich weiß, dass ich auch einfach den Text übertragen könnte, aber aus Effizienz Gründen würde ich das gerne vermeiden (soll ja mal über Internet laufen!)
Danke schonmal
EDIT: Wollte das Thema eigentlich unter AWT, SWING, .. oder so erstellen. Habe da wohl irgendwas falsch gemacht Kann ich das Thema verschieben / kann es verschoben werden?
ich habe auf meiner Oberfläche eine JTextArea zu deren Document ich einen DocumentListener hinzugefügt habe. Nun möchte ich eine andere JTextArea dazu bringen, diese Events zu verarbeiten, so dass die TextAreas immer den gleichen Inhat haben. Ist das möglich? Für andere Events gibt es ja immer die processXYZEvent() - Methoden, aber für DocumentEvents hab ich keine gefunden.
Das ganze soll nachher über Sockets auf einem Server benutzt werden, aber das ist für das Problem eher (denke ich) eher unwichtig, weil das genauso funktionieren würde wie wenn ich die unabhängig voneinander in demselben Frame laufen lasse.
Ich stelle mir das ungefähr so vor:
Java:
import java.util.LinkedList;
import java.util.List;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class MyClass extends JFrame{
private static final long serialVersionUID = 1L;
private List<DocumentEvent> events;
private JTextArea txt1;
private JTextArea txt2;
public MyClass(){
super("Example");
this.setSize(800, 600);
this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.X_AXIS));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
events = new LinkedList<DocumentEvent>();
txt1 = new JTextArea();
txt1.getDocument().addDocumentListener(new DocumentListener() {
public void removeUpdate(DocumentEvent e) {
synchronized (events) {
events.add(e);
}
}
public void insertUpdate(DocumentEvent e) {
synchronized (events) {
events.add(e);
}
}
public void changedUpdate(DocumentEvent e) {
synchronized (events) {
events.add(e);
}
}
});
this.add(txt1);
txt2 = new JTextArea();
this.add(txt2);
new Thread(new UpdateThread()).start();
this.setVisible(true);
}
private class UpdateThread implements Runnable{
public void run() {
while(true){
synchronized (events) {
for(DocumentEvent e : events){
//txt2 soll hier das Event verarbeiten
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
new MyClass();
}
}
Kann mir da jemand helfen? Oder bin ich ganz auf einer falschen Fährte? Ich weiß, dass ich auch einfach den Text übertragen könnte, aber aus Effizienz Gründen würde ich das gerne vermeiden (soll ja mal über Internet laufen!)
Danke schonmal
EDIT: Wollte das Thema eigentlich unter AWT, SWING, .. oder so erstellen. Habe da wohl irgendwas falsch gemacht Kann ich das Thema verschieben / kann es verschoben werden?
Zuletzt bearbeitet: