Hallo,
ich möchte gerade ein wenig mit Model-View-Controller "spielen" und dabei möchte ich eine Datei einlesen und zeilenweise in einer TextArea ausgeben.
Dazu hab ich einen Observer eingebaut, der mein Objekt eine Zeile überwacht und wenn sie sich ändert, wird der String in die Textarea geschrieben. Nun ist es aber so, dass meine Datei, so wie ich es vorhatte nicht zeilenweise, d.h. man kann den Verlauf des Einlesens in der TextArea nicht beobachten, erst wenn die Datei komplett eingelesen ist, erscheint alles in der TextArea. das möchte ich aber irgendwie nicht so gerne. Während des lesens ist natürlich dann auch die Gui (also View) gesperrt.
Hier mal mein Code:
Das Model:
Control:
View:
Danke schonmal für die Hilfe!
ich möchte gerade ein wenig mit Model-View-Controller "spielen" und dabei möchte ich eine Datei einlesen und zeilenweise in einer TextArea ausgeben.
Dazu hab ich einen Observer eingebaut, der mein Objekt eine Zeile überwacht und wenn sie sich ändert, wird der String in die Textarea geschrieben. Nun ist es aber so, dass meine Datei, so wie ich es vorhatte nicht zeilenweise, d.h. man kann den Verlauf des Einlesens in der TextArea nicht beobachten, erst wenn die Datei komplett eingelesen ist, erscheint alles in der TextArea. das möchte ich aber irgendwie nicht so gerne. Während des lesens ist natürlich dann auch die Gui (also View) gesperrt.
Hier mal mein Code:
Das Model:
Java:
public class Row extends Observable {
private String row = "";
public String getRow() {
return row;
}
public void setRow(String row) {
this.row = row;
setChanged();
notifyObservers(this);
}
}
Control:
Java:
public class Control {
private MainGui gui;
private Row readRow;
private String dataFolder = "...";
public Control(){
this.gui = new MainGui(this);
readRow = new Row();
readRow.addObserver(gui);
}
public void readKessyDate(){
try {
BufferedReader in = new BufferedReader(new FileReader(...));
String zeile = null;
while ((zeile = in.readLine()) != null) {
readRow.setRow(zeile);
}
} catch (IOException e) {
readRow.setRow(e.getMessage());
}
}
/**
* @param args
*/
public static void main(String[] args) {
Runnable gui = new Runnable(){
@Override
public void run() {
new Control();
}
};
SwingUtilities.invokeLater(gui);
}
}
View:
Java:
...
public MainGui(Control control) {
super();
this.control = control;
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(902, 200);
this.setContentPane(getJContentPane());
this.setTitle("WMTEST");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
...
private JButton getJButtonStart() {
if (jButtonStart == null) {
jButtonStart = new JButton();
jButtonStart.setBounds(new Rectangle(28, 15, 63, 16));
jButtonStart.setText("Start");
jButtonStart.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
control.readKessyDate();
}
});
}
return jButtonStart;
}
@Override
public void update(Observable arg0, Object arg1) {
Row readRow = (Row) arg1;
jTextArea.append(readRow.getRow());
}
Danke schonmal für die Hilfe!
Zuletzt bearbeitet: