Hallo zusammen,
ich habe ein kleines Problem mit der Serialisierungin Swing, an dem ich seit einer Woche sitze.
Ich habe in einem Package data vier Klassen:
- Eine Klasse Knoten (besitzt Name, x- und y-Koordinate als Membervariablen), die Serializable implementiert
- Von der Klasse Knoten wird eine Klasse Kreis abgeleitet wird (von der Klasse Knoten werden noch zwei weitere Klassen abgeleitet).
- Weiterhin gibt es ne Klasse Model, die eine ArrayList des Typs Knoten (und implements Serializable) besitzt. Die Klasse hat Methode add_Kreis, die Kreis zu der ArrayList hinzufügt.
- Die Klasse Model ist Bestandteil einer Klasse Panel (JPanel), in dem ein Kreis gezeichnet wird, sobald der Typ des Knotens Kreis ist.
Jetzt habe ich noch ein Package rahmen mit der Klasse Rahmen als JFrame, in ich das das Gezeichnete speichern und wieder laden. Hierzu speichere ich das Gezeichnete als Model ab. Beim Laden übergebe ich nun im Konstruktur des Rahmens mein Model und will nun, dass das wieder gezeichnet wird. Leider wird hier nichts angezeigt.Woran kann das liegen?
Ich poste hier mal meine Klasse Rahmen
sowie meine Klasse Panel
Vielen Dank!!
ich habe ein kleines Problem mit der Serialisierungin Swing, an dem ich seit einer Woche sitze.
Ich habe in einem Package data vier Klassen:
- Eine Klasse Knoten (besitzt Name, x- und y-Koordinate als Membervariablen), die Serializable implementiert
- Von der Klasse Knoten wird eine Klasse Kreis abgeleitet wird (von der Klasse Knoten werden noch zwei weitere Klassen abgeleitet).
- Weiterhin gibt es ne Klasse Model, die eine ArrayList des Typs Knoten (und implements Serializable) besitzt. Die Klasse hat Methode add_Kreis, die Kreis zu der ArrayList hinzufügt.
- Die Klasse Model ist Bestandteil einer Klasse Panel (JPanel), in dem ein Kreis gezeichnet wird, sobald der Typ des Knotens Kreis ist.
Jetzt habe ich noch ein Package rahmen mit der Klasse Rahmen als JFrame, in ich das das Gezeichnete speichern und wieder laden. Hierzu speichere ich das Gezeichnete als Model ab. Beim Laden übergebe ich nun im Konstruktur des Rahmens mein Model und will nun, dass das wieder gezeichnet wird. Leider wird hier nichts angezeigt.Woran kann das liegen?
Ich poste hier mal meine Klasse Rahmen
Java:
package rahmen;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;
import data.Model;
import data.Panel;
import data.Kreis;
public class Rahmen extends JFrame implements Serializable{
private static final long serialVersionUID = 1L;
public Panel panel;
public Model p;
private final class MyFileFilter extends FileFilter {
@Override
public String getDescription() { // TODO Auto-generated method stub return
return ".tt";
}
@Override
public boolean accept(File f) {
if (f.getName().contains(".") && (getExtension(f).equals("tt") || f.isDirectory()))
return true;
else
return false;
}
}
public static String getExtension(File f) {
String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
ext = s.substring(i + 1).toLowerCase();
}
return ext;
}
Rahmen(){
super("");
panel=new Panel();
add(panel);
getContentPane().setLayout(new BorderLayout());
setSize(400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Menu_Datei xy=new Menu_Datei();
this.setJMenuBar(xy);
xy.setVisible(true);
setVisible(true);
}
Rahmen(Model p){
super("");
this.p=new Model();
this.p=p;
panel=new Panel(this.p);
getContentPane().setLayout(new BorderLayout());
setSize(400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Menu_Datei xy=new Menu_Datei();
this.setJMenuBar(xy);
xy.setVisible(true);
add(panel);
setVisible(true);
}
public Panel getP() {
return panel;
}
public void setP(Panel p) {
this.panel = p;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public static void main(String[] args) {
Model p=new Model();
p.add_Kreis(new Kreis("1", 2, true, 100, 200, 50, 1));
Rahmen rahmen=new Rahmen(p);
}
class Menu_Datei extends javax.swing.JMenuBar{
private static final long serialVersionUID = 1L;
protected JMenu datei;
Menu_Datei(){
super();
datei=new JMenu("Datei");
datei.setMnemonic('D');
//Öffnen
JMenuItem mi=new JMenuItem("Öffnen", 'f');
mi.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Öffnen");
laden();
}
});
datei.add(mi);
//Speichern
JMenuItem mi1=new JMenuItem("Speichern", 'p');
mi1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Speichern");
speichern();
}
});
datei.add(mi1);
add(datei);
}
}
public boolean laden()
{
ObjectInputStream os;
final JFileChooser fi = new JFileChooser("load");
fi.setFileFilter(new MyFileFilter());
fi.setFileView(new MyFileViewer());
int returnVal = fi.showOpenDialog(this);
try {
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fi.getSelectedFile();
os = new ObjectInputStream(new FileInputStream(file));
p=(Model) os.readObject();
os.close();
this.dispose();
Rahmen tt=new Rahmen(p);
return true;
} else
JOptionPane.showMessageDialog(this,
"Datei muss die Endung tt haben.");
return false;
} catch (FileNotFoundException e1) {
e1.printStackTrace();
return false;
} catch (IOException e1) {
e1.printStackTrace();
return false;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return false;
}
}
public void speichern() {
final JFileChooser fc = new JFileChooser("save");
fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
fc.setFileFilter(new MyFileFilter());
int returnVal = fc.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = null;
File hilfsFile = fc.getSelectedFile();
file = hilfsFile;
try {
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(file));
os.writeObject((Model) panel.P_net);
os.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
Java:
package data;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.Serializable;
import javax.swing.JPanel;
public class Panel extends JPanel implements Serializable{
{
private static final long serialVersionUID = 1L;
public Model P_net;
public String paintComponent;
public Knoten selectedKreis=null;
public int object_number;
public Panel(){
super();
P_net=new Model();
object_number=0;
setVisible(true);
setSize(300,400);
setLocation(0,0);
}
public Panel(Model p){
super();
P_net=new Model();
this.P_net=p;
setVisible(true);
setSize(300,400);
setLocation(0,0);
}
public void fuege_Kreis(int x, int y){
object_number=object_number+1;
Knoten stelle_neu=new Kreis(this.toString(),0, false, x, y,30, object_number);
P_net.add_Kreis(stelle_neu);
this.setPaintComponent("Kreis");
this.repaint();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2D=(Graphics2D) g;
for (Knoten o: P_net.Array_Knoten) {
if (o.type=="Stelle"){
g2D.setColor(new Color(255, 0, 0));
g2D.drawOval(o.newx, o.newy, o.radius,o.radius);
}
}
}
public void setPaintComponent(String paintComponent) {
this.paintComponent = paintComponent;
}
}
Vielen Dank!!