Hallöchen,
Also ich bräuchte mal wieder eure hilfe, ich habe ein JFrame mit einen Button. Wenn ich auf den Button Drücke, entsteht im selben Fenster ein neues Panel mit einen Label. Aber wenn ich dass Programm schließe, öffnet sich ein Dialog, indem man einen Namen für eine Datei angeben kann, in der die Daten gespeichert werden. Doch wenn ich das Programm öffne, und die Datei öffne, wird mir alles dreifach angezeigt. Hat vielleicht jemand eine Idee??
Hier mein Code:
Also ich bräuchte mal wieder eure hilfe, ich habe ein JFrame mit einen Button. Wenn ich auf den Button Drücke, entsteht im selben Fenster ein neues Panel mit einen Label. Aber wenn ich dass Programm schließe, öffnet sich ein Dialog, indem man einen Namen für eine Datei angeben kann, in der die Daten gespeichert werden. Doch wenn ich das Programm öffne, und die Datei öffne, wird mir alles dreifach angezeigt. Hat vielleicht jemand eine Idee??
Hier mein Code:
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class Passwortmanager extends JFrame implements ActionListener, WindowListener {
private final List<String> values = new ArrayList<String>();
private JPanel listPanel;
private JButton addButton;
private JButton closeButton;
public Passwortmanager() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.addWindowListener(this);
this.setTitle("Passwortmanager(Test)");
this.setContentPane(createMainPanel());
this.pack();
queryFile();
}
private JPanel createMainPanel() {
listPanel = new JPanel();
listPanel.setPreferredSize(new Dimension(400, 200));
listPanel.setBorder(BorderFactory.createEtchedBorder());
JScrollPane pane = new JScrollPane(listPanel);
addButton = new JButton("Hinzufügen");
addButton.addActionListener(this);
closeButton = new JButton("Schließen");
closeButton.addActionListener(this);
JPanel buttonPanel = new JPanel();
buttonPanel.setBorder(BorderFactory.createEtchedBorder());
buttonPanel.add(addButton);
buttonPanel.add(closeButton);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(pane, BorderLayout.CENTER);
panel.add(buttonPanel, BorderLayout.SOUTH);
return panel;
}
private void queryFile() {
JFileChooser chooser = new JFileChooser();
int retVal = chooser.showOpenDialog(this);
if (retVal == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
loadFromFile(file);
}
}
private void loadFromFile(File file) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "";
while ((line = reader.readLine()) != null) {
values.add(line);
addInformation(line);
}
reader.close();
} catch (FileNotFoundException e) {
System.out.println("konnte die Datei nicht finden.");
} catch (IOException e) {
System.out.println("Beim laden der Datei ist ein Fehler aufgetreten");
}
}
private void writeToFile(File file) {
try {
PrintWriter writer = new PrintWriter(new FileOutputStream(file));
for (String name : values) {
writer.println(name);
}
writer.close();
} catch (FileNotFoundException e) {
System.err.println("Konnte nicht in die Datei schreiben.");
return;
}
}
private void addInformation(String name) {
values.add(name);
JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createEtchedBorder());
panel.add(new JLabel("Name: " + name));
listPanel.add(panel);
this.pack();
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == addButton) {
String name = JOptionPane.showInputDialog("Bitte Benutzernamen eingeben: ");
String passwort = JOptionPane.showInputDialog("Bitte Passwort eingeben: ");
String website = JOptionPane.showInputDialog("Bitte Namen der Website eingeben: ");
addInformation(name);
} else if (source == closeButton) {
windowClosing(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
this.setVisible(false);
}
}
public void windowOpened(WindowEvent e) {
}
public void windowClosing(WindowEvent e) {
if (values.isEmpty()) {
return;
}
JFileChooser chooser = new JFileChooser();
int retVal = chooser.showSaveDialog(this);
if (retVal == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
writeToFile(file);
}
System.exit(0);
}
public void windowClosed(WindowEvent e) {
}
public void windowIconified(WindowEvent e) {
}
public void windowDeiconified(WindowEvent e) {
}
public void windowActivated(WindowEvent e) {
}
public void windowDeactivated(WindowEvent e) {
}
public static void main(String[] args) {
final Passwortmanager pm = new Passwortmanager();
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
pm.setVisible(true);
}
});
}
}