![JAR search and dependency download from the Maven repository](/logo.png)
org.ggp.base.apps.server.states.StatesPanel Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alloy-ggp-base Show documentation
Show all versions of alloy-ggp-base Show documentation
A modified version of the GGP-Base library for Alloy.
The newest version!
package org.ggp.base.apps.server.states;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import org.ggp.base.server.event.ServerNewGameStateEvent;
import org.ggp.base.util.gdl.grammar.GdlSentence;
import org.ggp.base.util.observer.Event;
import org.ggp.base.util.observer.Observer;
import org.ggp.base.util.statemachine.MachineState;
@SuppressWarnings("serial")
public class StatesPanel extends JPanel implements Observer {
private JTabbedPane tabs = new JTabbedPane();
public StatesPanel()
{
this.add(tabs);
}
private int stepCount = 1;
@Override
public void observe(Event event) {
if (event instanceof ServerNewGameStateEvent)
{
MachineState s = ((ServerNewGameStateEvent)event).getState();
// TODO: Perhaps this should run in a separate thread, as in the
// VisualizationPanel, in case these states are very large.
JPanel statePanel = new JPanel();
List sentences = new ArrayList();
for(GdlSentence sentence : s.getContents())
sentences.add(sentence.toString());
//The list of sentences is more useful when sorted alphabetically.
Collections.sort(sentences);
StringBuilder sentencesList = new StringBuilder();
for(String sentence : sentences)
sentencesList.append(sentence).append("\n");
JTextArea statesTextArea = new JTextArea(sentencesList.toString());
statesTextArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(statesTextArea);
scrollPane.setPreferredSize(new Dimension(400, 500));
statePanel.add(scrollPane);
// Add the panel as a new tab
// Reusing the VisualizationPanel code, to make it easier in case this gets
// moved off into a new thread
int stepNum = stepCount;
stepCount++;
boolean atEnd = (tabs.getSelectedIndex() == tabs.getTabCount()-1);
for(int i = tabs.getTabCount(); i < stepNum; i++)
tabs.add(new Integer(i+1).toString(), new JPanel());
tabs.setComponentAt(stepNum-1, statePanel);
tabs.setTitleAt(stepNum-1, new Integer(stepNum).toString());
if(atEnd) {
tabs.setSelectedIndex(tabs.getTabCount()-1);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy