001 /*
002 * SimuCS - Simulator to use with Classifier Systems
003 * MSc project - Oxford University
004 * by Benoit Isaac - Summer 2005
005 */
006
007 package simuLCS.graphics;
008 import java.awt.BorderLayout;
009 import java.awt.Dimension;
010 import java.awt.FlowLayout;
011 import java.awt.Graphics;
012
013 import javax.swing.BoxLayout;
014 import javax.swing.JLabel;
015 import javax.swing.JPanel;
016 import javax.swing.JTextField;
017 import javax.swing.event.DocumentEvent;
018 import javax.swing.event.DocumentListener;
019
020 import simuLCS.Classifier;
021 import simuLCS.Template;
022
023 /**
024 * Handles the Panel showing the GUI according to the Template of the
025 * currently selected entity
026 * @author Benoit
027 *
028 */
029 public class G_PanClassifier extends G_Panel {
030
031 protected G_Panel panNorth, panCenter, panSouth;
032 protected G_TemplatePanActions panActions;
033 protected G_TemplatePanConditions panConditions;
034 private Classifier currentClass;
035
036 private JTextField nameField;
037
038 private String titlePanel ;
039
040 private String previousName = "";
041
042 public G_PanClassifier(String title) {
043 super();
044 titlePanel = title;
045 setLayout(new BorderLayout());
046
047 panNorth = new G_Panel();
048 createPanNorth(titlePanel,panNorth);
049
050 add(panNorth, BorderLayout.NORTH);
051 // add(panCenter,BorderLayout.CENTER);
052
053 }
054
055
056
057 protected void createPanNorth(String title,G_Panel p) {
058 // G_Panel p = new G_Panel();
059 p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
060 JLabel j = new JLabel(title);
061
062 JPanel name = new JPanel(new FlowLayout());
063 JLabel n = new JLabel("Name ?");
064 nameField = new JTextField(20);
065 nameField.getDocument().addDocumentListener(new ChangeNameListener());
066
067 Template t = getTemplateFromSelected();
068 JLabel n2 = new JLabel("Condition for other agent:");
069 panConditions = new G_TemplatePanConditions(t, t.getConditions());
070 JLabel n3 = new JLabel("Action:");
071 panActions = new G_TemplatePanActions(t, t.getActions());
072
073 name.add(n);
074 name.add(nameField);
075
076 p.add(j);
077 p.add(name);
078 p.add(n2);
079 p.add(panConditions);
080 p.add(n3);
081 p.add(panActions);
082 G_Panel jempty = new G_Panel();
083 jempty.setPreferredSize(new Dimension(this.getWidth(),50));
084 jempty.setMinimumSize(new Dimension(this.getWidth(),50));
085 p.add(jempty);
086
087 p.validate();
088 }
089
090 class ChangeNameListener implements DocumentListener {
091 public synchronized void updateName(DocumentEvent e) {
092
093 if (nameField.getText().equals("")) {
094 // User didn't type in a name...
095 // Toolkit.getDefaultToolkit().beep();
096 return;
097 } else {
098 if (!nameField.getText().equals(previousName)) {
099 // new name, we update
100 currentClass.setName(nameField.getText());
101 previousName = nameField.getText();
102 repaintCustom();
103 }
104
105 }
106 }
107
108 /* (non-Javadoc)
109 * @see javax.swing.event.DocumentListener#changedUpdate(javax.swing.event.DocumentEvent)
110 */
111 public void changedUpdate(DocumentEvent e) {
112 updateName(e);
113 }
114
115 /* (non-Javadoc)
116 * @see javax.swing.event.DocumentListener#insertUpdate(javax.swing.event.DocumentEvent)
117 */
118 public void insertUpdate(DocumentEvent e) {
119 updateName(e);
120 }
121
122 /* (non-Javadoc)
123 * @see javax.swing.event.DocumentListener#removeUpdate(javax.swing.event.DocumentEvent)
124 */
125 public void removeUpdate(DocumentEvent e) {
126 updateName(e);
127
128 }
129 }
130
131 public void updateValues() {
132 currentClass = G_Panel.getCurrentClassifier();
133 if (currentClass != null && getTemplateFromSelected() != null) {
134 nameField.setText(currentClass.getName());
135 nameField.validate();
136
137 panActions.updateValues();
138 panConditions.updateValues();
139
140 }
141
142
143 }
144
145 public void paintComponents(Graphics g) {
146 createPanNorth(titlePanel,panNorth);
147 updateValues();
148
149 this.validate();
150 }
151 }