Guten Abend zusammen,
ich hänge seit 2 Wochen an einer Aufgabe und komme nicht weiter und hab das Gefühl ich habs komplett falsch verstanden/gemacht.
Ich hab gesehen es gab diese Aufgabe im Forum schon öfter. Hab ich mir auch durchgelesen aber hat mir nicht wirklich weiter geholfen, daher schon mal sorry falls es dem ein oder anderen hier schon bekannt vor kommt.
Folgende Aufgabe:
Erstellen Sie einen Editor, mit dem Sie eine Wortliste für das Hangman-Spiel in einer Datei ablegen können. Speichern Sie in dieser Datei nicht nur die Wörter an sich, sondern auch die Anzahl der gespeicherten Wörter.
Für das Speichern reicht es aus, wenn Sie jeweils ein neues Wort am Ende der Datei anhängen. Eine nachträgliche Änderung von gespeicherten Wörtern ist nicht erforderlich. Der Editor soll aber die bereits vorhandenen Wörter anzeigen können.
Wie Sie den Editor im Detail umsetzen und welche Bibliothek Sie für die Oberfläche verwenden, bleibt Ihnen überlassen. Dokumentieren Sie Ihre Lösung aber bitte ausführlich.
So nun mein bisheriger Code dazu:
Die Oberfläche an sich gefällt mir bisher eigentlich ganz gut. Aber nun hab ich die fertig gestellt und frage mich ob mein TextField überhaupt richtig ist oder ob es wenn von einem Editor die Rede ist ich TextArea wählen müsste? Dann hab ich es ja so erstellt das darunter Labels angezeigt werden in welchen die Wörter sowie Anzahl angezeigt werden soll. Wird also nicht im Editor angezeigt. Habs aber auch überhaupt nicht hingebracht dass die gespeicherten Wörter in den Labels angezeigt werden. Wusst nicht so recht wie. Nun hab ich ewig daran gearbeitet und schätze fast umsonst. Wie ist eure Meinung? Was ist falsch was könnte ich machen?
Bin für jeden Tipp dankbar!
ich hänge seit 2 Wochen an einer Aufgabe und komme nicht weiter und hab das Gefühl ich habs komplett falsch verstanden/gemacht.
Ich hab gesehen es gab diese Aufgabe im Forum schon öfter. Hab ich mir auch durchgelesen aber hat mir nicht wirklich weiter geholfen, daher schon mal sorry falls es dem ein oder anderen hier schon bekannt vor kommt.
Folgende Aufgabe:
Erstellen Sie einen Editor, mit dem Sie eine Wortliste für das Hangman-Spiel in einer Datei ablegen können. Speichern Sie in dieser Datei nicht nur die Wörter an sich, sondern auch die Anzahl der gespeicherten Wörter.
Für das Speichern reicht es aus, wenn Sie jeweils ein neues Wort am Ende der Datei anhängen. Eine nachträgliche Änderung von gespeicherten Wörtern ist nicht erforderlich. Der Editor soll aber die bereits vorhandenen Wörter anzeigen können.
Wie Sie den Editor im Detail umsetzen und welche Bibliothek Sie für die Oberfläche verwenden, bleibt Ihnen überlassen. Dokumentieren Sie Ihre Lösung aber bitte ausführlich.
So nun mein bisheriger Code dazu:
Java:
package wörterliste;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.RandomAccessFile;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Wörterliste extends JFrame {
private static final long serialVersionUID = 6468516705291496250L;
private JTextField feld;
private JLabel wörter, anzahl;
private JButton laden, beenden, hinzufügen;
private int anzahlWoerter;
private JPanel panelTexteingabe() {
JPanel tempPanel = new JPanel();
JLabel ausgabe = new JLabel("Worteingabe:");
feld = new JTextField(20);
tempPanel.setLayout(new GridLayout(0,2));
tempPanel.add(ausgabe);
tempPanel.add(feld);
return tempPanel;
}
private JPanel panelDatenAusgabe() {
JPanel tempPanel = new JPanel();
anzahl = new JLabel("Anzahl der Wörter: ");
wörter = new JLabel("Gespeicherte Wörter: ");
tempPanel.setLayout(new GridLayout(2,0));
tempPanel.add(anzahl);
tempPanel.add(wörter);
return tempPanel;
}
private JPanel panelButtonsErstellen() {
JPanel tempPanel = new JPanel();
laden = new JButton("Gespeicherte Daten laden");
laden.setActionCommand("lesen");
hinzufügen = new JButton("Neues Wort hinzufügen");
hinzufügen.setActionCommand("speichern");
beenden = new JButton("Beenden");
beenden.setActionCommand("ende");
tempPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
tempPanel.add(laden);
tempPanel.add(hinzufügen);
tempPanel.add(beenden);
return tempPanel;
}
class MeinListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("lesen"))
datenLesen();
if (e.getActionCommand().equals("hinzufügen"))
datenSchreiben();
if (e.getActionCommand().equals("ende"))
System.exit(0);
}
}
// der Konstruktor
public Wörterliste(String titel) {
super(titel);
JPanel panelText, panelDaten, panelButtons;
panelText = panelTexteingabe();
panelDaten = panelDatenAusgabe();
panelButtons = panelButtonsErstellen();
MeinListener listener = new MeinListener();
laden.addActionListener(listener);
hinzufügen.addActionListener(listener);
beenden.addActionListener(listener);
setLayout(new GridLayout(3,0));
add(panelText);
add(panelDaten);
add(panelButtons);
pack();
setVisible(true);
}
private void datenLesen() {
try(RandomAccessFile datei = new RandomAccessFile("liste.bin", "r")) {
String tempWörter;
int tempAnzahl;
for (int index = 0; index < anzahlWoerter; index++) {
tempAnzahl = datei.readInt();
tempWörter = datei.readUTF();
}
}
catch (IOException e) {
JOptionPane.showMessageDialog(this, "Beim Laden ist ein Fehler aufgetreten");
}
}
private void datenSchreiben() {
try (RandomAccessFile datei = new RandomAccessFile("liste.bin", "rw")) {
if(feld.getText().equals(""))
{
JOptionPane.showMessageDialog(null, "Sie haben noch kein Wort eingegeben");
}
else
{
anzahlWoerter++;
datei.writeInt(anzahlWoerter);
datei.seek(datei.length());
datei.writeUTF(feld.getText());
//Textfeld leeren
feld.setText("");
}
}
catch (IOException e)
{
JOptionPane.showMessageDialog(this, "Beim Schreiben ist ein Problem aufgetreten");
}
}
}
Die Oberfläche an sich gefällt mir bisher eigentlich ganz gut. Aber nun hab ich die fertig gestellt und frage mich ob mein TextField überhaupt richtig ist oder ob es wenn von einem Editor die Rede ist ich TextArea wählen müsste? Dann hab ich es ja so erstellt das darunter Labels angezeigt werden in welchen die Wörter sowie Anzahl angezeigt werden soll. Wird also nicht im Editor angezeigt. Habs aber auch überhaupt nicht hingebracht dass die gespeicherten Wörter in den Labels angezeigt werden. Wusst nicht so recht wie. Nun hab ich ewig daran gearbeitet und schätze fast umsonst. Wie ist eure Meinung? Was ist falsch was könnte ich machen?
Bin für jeden Tipp dankbar!