package javaforum.kingofexceptions;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.io.IOException;
import java.util.EventListener;
import java.util.EventObject;
import java.util.LinkedList;
import java.util.List;
import javaforum.kingofexceptions.GuiMaker.Spieler.SpielerEvent;
import javaforum.kingofexceptions.GuiMaker.Spieler.SpielerListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTabbedPane;
class GuiMaker {
private JFrame frame;
private JTabbedPane tp;
GuiMaker() {
setBasics();
}
void setBasics() {
frame = new JFrame("Spielerverwaltung");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
tp = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);
frame.add(tp, BorderLayout.CENTER);
relocate();
frame.setVisible(true);
}
public void makeNewTab(String playersName, String message, String hover) {
tp.addTab(playersName, null, new JLabel(message), hover);
}
public void relocate() {
frame.pack();
frame.setLocationRelativeTo(null);
}
public static class SpielerVerwaltung {
private GuiMaker maker;
private List<Spieler> spielerList;
public SpielerVerwaltung() {
maker = new GuiMaker();
spielerList = new LinkedList<GuiMaker.Spieler>();
for(int i = 0; i < 5; i++) {
int playerId = i + 1;
createPlayer("Player " + playerId, "Nachricht des Spielers " + playerId);
}
try {
spielerList.get(0).spielerSuchen();
} catch (IOException e) {
e.printStackTrace();
}
maker.relocate();
}
private void createPlayer(String playerName, String playerMessage) {
Spieler spieler = new Spieler();
spieler.setName(playerName);
spieler.addSpielerListener(new SpielerListener() {
public void spielerGefunden(SpielerEvent e) {
maker.makeNewTab(e.getSpielerName(), "Nachricht", e.getSpielerName());
}
});
spielerList.add(spieler);
}
}
public static class Spieler {
private SpielerModel model;
public Spieler() {
this(new DefaultSpielerModel());
}
public Spieler(SpielerModel model) {
this.model = model;
}
public void spielerSuchen() throws IOException
{
String spielername = JOptionPane.showInputDialog(null, "Name des Spielers, der gesucht werden soll:");
getListOfPlayers();
String mySpielerName = model.getSpielerName();
if (mySpielerName.contains(spielername))
{
getListOfInfos();
//String info= spielerInfos.elementAt(spielerNamen.indexOf(spielername));
try {
fireSpielerFoundEvent(spielername);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void setName(String newName) {
model.setSpielerName(newName);
}
public void addSpielerListener(SpielerListener listener) {
model.addSpielerListener(listener);
}
protected void fireSpielerFoundEvent(String spielername) {
SpielerListener[] listeners = model.getSpielerListeners();
final SpielerEvent event = new SpielerEvent(this, spielername);
for(final SpielerListener l:listeners) {
EventQueue.invokeLater(new Runnable() {
public void run() {
l.spielerGefunden(event);
}
});
}
}
private void getListOfInfos() {
// TODO Auto-generated method stub
}
private void getListOfPlayers() {
// TODO Auto-generated method stub
}
public static interface SpielerModel {
void addSpielerListener(SpielerListener l);
SpielerListener[] getSpielerListeners();
void setSpielerName(String s);
String getSpielerName();
}
public static class DefaultSpielerModel implements SpielerModel {
private String spielerName;
private List<SpielerListener> spielerListener;
public DefaultSpielerModel() {
spielerListener = new LinkedList<SpielerListener>();
}
public void addSpielerListener(SpielerListener l) {
spielerListener.add(l);
}
public SpielerListener[] getSpielerListeners() {
return(spielerListener.toArray(new SpielerListener[spielerListener.size()]));
}
public void setSpielerName(String s) {
spielerName = s;
}
public String getSpielerName() {
return(spielerName);
}
}
public static interface SpielerListener extends EventListener {
void spielerGefunden(SpielerEvent e);
}
public static class SpielerEvent extends EventObject {
private String spielerName;
public SpielerEvent(Object source) {
super(source);
}
public SpielerEvent(Object source, String spielerName) {
super(source);
this.spielerName = spielerName;
}
public String getSpielerName() {
return spielerName;
}
}
}
public static void main(String[] args) {
new SpielerVerwaltung();
}
}