Hi:
Sorry to just now be getting to this. Here's my proposal for 'base' classes and structures.
Sample 'Data' Class:
Code:
import java.util.*;
public class GameData extends Observable implements Observer
{
private Vector civilizations;
public GameData()
{
initData();
}
private void initData()
{
civilizations = new Vector();
}
public void addCivilization(Civilization c)
{
civilizations.addElement(c);
notifyObservers(c);
}
public void removeCivilization(Civilization c)
{
int index = civilizations.indexOf(c);
civilizations.removeElementAt(index);
notifyObservers(c);
}
public Enumeration getAllCivs()
{
return civilizations.elements();
}
public void update(Observable o, Object arg)
{
notifyObservers(arg);
}
}
}
Sample 'View' class that is tied to the above data:
Code:
import java.awt.*;
import java.util.*;
public class CivilizationsView extends Panel implements Observer
{
private GameData data;
private java.awt.List civ_list;
public CivilizationsView(GameData d)
{
initData(d);
initView();
updateView();
}
private void initData(GameData d)
{
data = d;
data.addObserver(this);
}
private void initView()
{
civ_list = new java.awt.List(4);
add(civ_list, "Center");
}
private void updateView()
{
Enumeration enum = data.getAllCivs();
while(enum.hasMoreElements())
{
Civilization c = (Civilization)enum.nextElement();
civ_list.addItem(c.getName());
}
}
public void update(Observable o, Object arg)
{
updateView();
}
}
And, for illustration, a beginning 'Civilization' data class:
Code:
import java.util.*;
public class Civilization extends Observable
{
private String name;
public Civilization()
{
}
public Civilization(String n)
{
setName(n);
}
public void setName(String n)
{
name = n;
notifyObservers(name);
}
}
Does this meet with everone's approval?
The pattern is simple, I think. This way, all GUI components are built in exactly the same way. And all GUI components interact with the data thru a single object -- GameData. So we can change the data model around all we want, and not have to worry about re-working any of the 'View' code.
Okay? Comments, suggestions, flames?
Bookmarks