ich bin erst vor kurzem wieder angefangen zu programmieren und hänge nun fest.
ich möchte die datei admin.txt auslesen und in JTextArea admin anzeigen lassen.
nur wie geht das? ich kann nach dem das fenster erstellt wurde, nicht auf admin zugreifen.
ich weiß nicht ob ich mich verständlich ausgedrückt hab. deswegen fragt ruhig.
ich hoffe ihr könnt mir behilflich sein ^^
danke im voraus
hauptmethode
Code:
public static void main(String[] args) throws Exception {
try
{
BufferedReader ad = new BufferedReader(
new InputStreamReader(
new FileInputStream( "admin.txt" ) ) );
Klicker fenster = new Klicker();
}
catch (FileNotFoundException fnf){ System.out.println("Fehler!");
} catch (Exception fehler){ System.out.println("Unbekannter Fehler!");
}
}
}
gui
Code:
public Klicker()
{
//fenstergröße setzen
super("SplitKlicker");
setSize(800,500);
setLocation(100,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setBackground(Color.black);
panel = new JPanel(new GridLayout(1,1));
admin = new JTextArea("");
scradmin = new JScrollPane(admin);
//panel
panel.add(scradmin);
getContentPane().add(panel);
pack();
setSize(800,500);
setVisible(true);
}
dein lösungsvorschlag sieht ja wirklich kompliziert aus...
einem anfänger wir mir hilft das leider nicht. ich finde es mit parameter-übergabe einfacher.
@andré
dein lösungsvorschlag sieht ja wirklich kompliziert aus...
einem anfänger wir mir hilft das leider nicht. ich finde es mit parameter-übergabe einfacher.
Ob der Klicker den Reader selbst erzeugt oder man ihn übergibt, ist ja im Grunde unerheblich.
Ich hab das Laden in eine eigene Methode gepackt, dann kann der Aufrufer der Funktion
durch den boolean Rückgabewert überprüfen, ob das Laden erfolgreich war oder nicht.
Das Wichtigste an meinem Beispiel ist aber "invokeLater" in der main Methode:
das ist ein sehr einfacher Konstrukt, der für Swing Programme notwendig ist:
andernfalls würde man die GUI auf dem "initial thread" starten,
was den Richtlinien für Swing Programme widerspricht.
je länger ich an diesem java-zeugs sitze, blicke ich langsam auch durch deinen code durch. ^^
einige fragen hab ich noch zu deinem lösungsvorschlag:
wofür verwendet man folgenden befehl?
Code:
setLocationRelativeTo(null);
du startest einen neuen thread? aber musste man da nicht Runnable implementieren? ich hab jetzt einen actionlistener implementiert. dabei kann ich doch nich runnable auch noch implementieren.
Code:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Klicker().setVisible(true);
}
});
Die Zeile setLocationRelativeTo(null); fügt man gewöhnlich hinzu, um den JFrame zu zentrieren.
Ich starte keinen neuen Thread!
Ich benutze lediglich den Thread, welcher der graphischen Anzeige von Swing gewidmet ist (Event Dispatch Thread):
SwingUtilities.invokeLater(Runnable) stellt eine Aktion in die Warteschlange, die in dem Thread durchzuführen ist,
welcher der graphischen Anzeige gewidmet ist.
Das ist auch im Einklang mit deinem ActionListener, denn der läuft auch auf dem Event Dispatch Thread,
und zwar automatisch. Im ActionListener musst du lediglich actionPerformed implementieren.