Code:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
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.JTextField;
public class GuiKlasse extends JFrame {
// für das Eingabefeld
private JTextField anzahl, wortliste;
// für die Schaltflächen
private JButton einlesen, beenden, speichern;
// eine Intansvaribale für typ RamdomAccesFile
private RandomAccessFile dateiListe;
// die innere Klasse für den ActionListener
class MeinListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// wurde auf Lesen geklickt?
if (e.getActionCommand().equals("lesen"))
// dann die Datei einlesen
datenLesen();
if (e.getActionCommand().equals("wortSpeichern"))
// dann die Datei einlesen
// wurde auf Beenden geklickt?
if (e.getActionCommand().equals("ende"))
System.exit(0);
}
}
public GuiKlasse(String titel) {
super(titel);
// ein GridLayout mit 2 Spalten anwenden
setLayout(new GridLayout(0, 2));
add(new JLabel("Wörter: "));
wortliste = new JTextField("");
add(wortliste);
add(new JLabel("Nummer: "));
anzahl = new JTextField("");
add(anzahl);
// die Schaltflächen
einlesen = new JButton("Wort Ausgeben");
einlesen.setActionCommand("lesen");
beenden = new JButton("Beenden");
beenden.setActionCommand("ende");
speichern = new JButton("Speichern");
speichern.setActionCommand("wortSpeichern");
MeinListener listener = new MeinListener();
einlesen.addActionListener(listener);
beenden.addActionListener(listener);
speichern.addActionListener(listener);
// gibt es die Datei daten.bin schon?
File dateiTest = new File("liste.bin");
// wenn nicht, erstellen wir sie neu
if (dateiTest.exists() == false)
datenSchreiben();
add(speichern);
add(einlesen);
// add(beenden);
pack();
setSize(300, 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
// Die Methode zum Speichern
private void datenSpeichern() {
}
// die Methode zum Lesen
private void datenLesen() {
int gesucht;
// steht im Eingabefeld ein Wert?
// sonst verlassen wir die Methode direkt wieder
if (anzahl.getText().isEmpty())
return;
gesucht = Integer.parseInt(anzahl.getText());
try {
// für das Positionieren
long neuePosition = 0;
int punkte = 0;
int treffer = 0;
// geöffnet wird die Datei liste.bin im Nur-Lesen-Modus
dateiListe = new RandomAccessFile("liste.bin", "r");
// die gesamte Datei durchsuchen
while (dateiListe.getFilePointer() < dateiListe.length()) {
// die Punktzahl lesen
punkte = dateiListe.readInt();
// stimmen Punkte und Suchkriterium überein?
if (punkte == gesucht) {
// dann die Treffer erhöhen
treffer++;
// die Punkte anzeigen
add(new JLabel(Integer.toString(punkte)));
// den Namen lesen
add(new JLabel(dateiListe.readUTF()));
}
// wenn nicht, dann den Namen überlesen
else {
// die Länge beschaffen
neuePosition = dateiListe.readUnsignedShort();
// die neue Position ansteuern
dateiListe.seek(dateiListe.getFilePointer() + neuePosition);
}
}
// wenn es keinen Treffer gab, eine Meldung ausgeben
if (treffer == 0)
JOptionPane.showMessageDialog(this, "Kein Treffer");
dateiListe.close();
} catch (IOException e) {
JOptionPane.showMessageDialog(this,
"Beim Laden ist ein Problem aufgetreten");
}
// das Fenster neu "packen"
pack();
}
// die Methode zum Schreiben
private void datenSchreiben() {
try {
// geöffnet wird die Datei liste.bin im Lese- und Schreibmodus
dateiListe = new RandomAccessFile("liste.bin", "rw");
// ein paar Werte in die Datei schreiben
dateiListe.writeInt(1);
dateiListe.writeUTF("Automobil");
dateiListe.writeInt(2);
dateiListe.writeUTF("Versuch");
dateiListe.writeInt(3);
dateiListe.writeUTF("Hund");
dateiListe.writeInt(4);
dateiListe.writeUTF("Katze");
dateiListe.writeInt(5);
dateiListe.writeUTF("Ziege");
dateiListe.writeInt(6);
dateiListe.writeUTF("Maus");
dateiListe.writeInt(7);
dateiListe.writeUTF("Elapfant");
dateiListe.writeInt(8);
dateiListe.writeUTF("Isopropylalkohol");
dateiListe.writeInt(9);
dateiListe.writeUTF("Schwimmbad");
dateiListe.writeInt(10);
dateiListe.writeUTF("Test");
dateiListe.close();
} catch (IOException e) {
JOptionPane.showMessageDialog(this,
"Beim Schreiben ist ein Problem aufgetreten");
}
}
}
mfg
kaper28