Hallo,
ich probiere gerade etwas mit dem MVC herum, und habe die Basics auch verstanden. Folgender Aufbau meiner vier Klassen, ich beschränke mich auf das Nötigste:
Meine View ist einfach ein Panel in dem was abgebildet werden soll...
und hier meine Controller Klasse
Und zu guter letzt mein Modell
1) Mich interessiert mal, ob ich das nun wirklich richtig verstanden habe, oder ob das kompletter Mist ist :meld:
2) Bis dato bekomme ich immer
das passiert im View in Zeile 20 :roll: Verstehe ich nicht so ganz, wie soll ich denn sonst was neues hinzufügen?
3) Wenn ich Panels verschachtel, also z.B. ein Panel in eine JScrollPane und dann vielleicht noch in eine JSplitPane, dann bleibt für das Observable immer das "eigentliche" Panel interessant oder?
Danke für eure Antworten!
Fry
ich probiere gerade etwas mit dem MVC herum, und habe die Basics auch verstanden. Folgender Aufbau meiner vier Klassen, ich beschränke mich auf das Nötigste:
Code:
public class MyMain extends JFrame
{
public MyMain()
{
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
//das wird die View
MyView mv = new MyView();
JScrollPane pane = new JScrollPane(mv);
//Objekt vom Modell erstellen
MyModel mm = new MyModel();
//Controller erstellen mit "Modellübergabe"
MyController mc = new MyController(mm);
JScrollPane pane2 = new JScrollPane(mc);
contentPane.add(pane2, BorderLayout.WEST);
contentPane.add(pane, BorderLayout.CENTER);
//Observer zum controller hinzufügen
em.addObserver(mc);
//Observer zum View hinzufügen
em.addObserver(mv);
}
public static void main(String[] args)
{
MyMain mm = new MyMain();
mm.setVisible(true);
}
}
Meine View ist einfach ein Panel in dem was abgebildet werden soll...
Code:
public class MyView extends JPanel implements Observer
{
public void update(Observable ob, Object arg)
{
MyModel m = (MyModel) ob;
if(m.getChartPanel() == null)
{
//erstellt ein ChartPanel in der anderen ModellKlasse
m.addBarChart();
//holt sich das Panel
panel = m.getChartPanel();
}
else
{
//Panel holen
panel = m.getChartPanel();
//alle Inhalte rauswerfen und neues ChartPanel einfügen
panel.removeAll();
panel.add(m.getChartPanel());
}
//neu zecihenn
panel.repaint();
}
private ChartPanel panel;
}
und hier meine Controller Klasse
Code:
public class MyController extends JPanel implements Observer, TreeSelectionListener
{
public MyController(MyModel m)
{
//Modelobjekt übergeben
model = m;
[...]//hier wird halt nen Tree erstellt
tree = new JTree(root);
int mode = TreeSelectionModel.SINGLE_TREE_SELECTION;
tree.getSelectionModel().setSelectionMode(mode);
tree.addTreeSelectionListener(this);
add(tree);
}
public void update(Observable ob, Object arg)
{
//Hier wird dann irgendwas im Model geändert
}
public void valueChanged(TreeSelectionEvent e)
{
TreePath path = tree.getSelectionPath();
if(path.toString().equals("<Hier Name es Knoten....>"))
{
model.addBarChart();
}
}
private JTree tree;
private MyModel model;
}
Und zu guter letzt mein Modell
Code:
public class MyModel extends Observable
{
public void addBarChart()
{
//Diagramm generiern
setCharPanel(...)
setChanged();
notifyObservers();
}
public void addPieChart()
{
//Diagramm generiern
setCharPanel(...)
setChanged();
notifyObservers();
}
public void setChartPanel(ChartPanel p)
{
chartPanel = p;
}
public ChartPanel getChartPanel()
{
return chartPanel;
}
private ChartPanel chartPanel;
}
1) Mich interessiert mal, ob ich das nun wirklich richtig verstanden habe, oder ob das kompletter Mist ist :meld:
2) Bis dato bekomme ich immer
Code:
java.lang.IllegalArgumentException: adding container's parent to itself
3) Wenn ich Panels verschachtel, also z.B. ein Panel in eine JScrollPane und dann vielleicht noch in eine JSplitPane, dann bleibt für das Observable immer das "eigentliche" Panel interessant oder?
Danke für eure Antworten!
Fry