[TASK] Make observer window always scroll horizontally

This commit is contained in:
Jan Philipp Timme 2016-10-02 16:31:25 +02:00
parent e22e41d4f3
commit 1879d657c6
2 changed files with 65 additions and 15 deletions

View File

@ -6,7 +6,6 @@ import org.apache.log4j.PropertyConfigurator;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import eu.larkc.csparql.core.engine.ConsoleFormatter;
import eu.larkc.csparql.core.engine.CsparqlEngine; import eu.larkc.csparql.core.engine.CsparqlEngine;
import eu.larkc.csparql.core.engine.CsparqlEngineImpl; import eu.larkc.csparql.core.engine.CsparqlEngineImpl;
import eu.larkc.csparql.core.engine.CsparqlQueryResultProxy; import eu.larkc.csparql.core.engine.CsparqlQueryResultProxy;
@ -55,8 +54,8 @@ public class Main {
// Debugging: Needed to verify which engine is being used // Debugging: Needed to verify which engine is being used
//logger.debug("CWD: " + System.getProperty("user.dir")); logger.debug("CWD: " + System.getProperty("user.dir"));
//logger.debug("Engine from: " + engine.getClass().getProtectionDomain().getCodeSource()); logger.debug("Engine from: " + engine.getClass().getProtectionDomain().getCodeSource());
// Create and register stream generator at specific URI // Create and register stream generator at specific URI
//RentACarSimulation simulation = new RentACarSimulation(); //RentACarSimulation simulation = new RentACarSimulation();
@ -72,7 +71,7 @@ public class Main {
testGeneratorThread.start(); testGeneratorThread.start();
// Now build a query to run - interchangeable // Now build a query to run - interchangeable
String query = Main.getSPO(); String query = Main.getPatternANOTBCQuery();
//String query = RentACarSimulation.getEventUsingBackgroundKnowledge(); //String query = RentACarSimulation.getEventUsingBackgroundKnowledge();
// Create a result proxy by registering the query at the engine // Create a result proxy by registering the query at the engine
@ -98,8 +97,7 @@ public class Main {
logger.error(e.getStackTrace().toString()); logger.error(e.getStackTrace().toString());
}*/ }*/
// Add ConsoleFormatter as observer so it gets notified of every query result // Add observer to query result proxy
resultProxy.addObserver(new ConsoleFormatter());
resultProxy.addObserver(Main.observerWindow); resultProxy.addObserver(Main.observerWindow);
// Let it all run for some time // Let it all run for some time
@ -122,8 +120,6 @@ public class Main {
testGeneratorThread.interrupt(); testGeneratorThread.interrupt();
engine.unregisterStream(testStreamGenerator.getIRI()); engine.unregisterStream(testStreamGenerator.getIRI());
// That's it!
System.exit(0);
} }
private static String getSPO() { private static String getSPO() {

View File

@ -4,6 +4,7 @@ import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Container; import java.awt.Container;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Font;
import java.awt.Insets; import java.awt.Insets;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
@ -13,8 +14,11 @@ import java.util.Observable;
import java.util.Observer; import java.util.Observer;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import javax.swing.JButton;
import javax.swing.JCheckBox; import javax.swing.JCheckBox;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import javax.swing.JTextPane; import javax.swing.JTextPane;
import javax.swing.text.AttributeSet; import javax.swing.text.AttributeSet;
@ -23,8 +27,6 @@ import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants; import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext; import javax.swing.text.StyleContext;
import com.sun.xml.internal.ws.resources.TubelineassemblyMessages;
import eu.larkc.csparql.cep.api.RdfQuadruple; import eu.larkc.csparql.cep.api.RdfQuadruple;
import eu.larkc.csparql.common.RDFTable; import eu.larkc.csparql.common.RDFTable;
import eu.larkc.csparql.common.RDFTuple; import eu.larkc.csparql.common.RDFTuple;
@ -126,10 +128,30 @@ public class TextObserverWindow extends JFrame implements Observer {
Container contentPane = this.getContentPane(); Container contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout()); contentPane.setLayout(new BorderLayout());
// Get a TextPane ready // Add a title label for convenience
this.textPane = new JTextPane(); JLabel titleLabel = new JLabel(title);
Font labelFont = titleLabel.getFont();
titleLabel.setFont(new Font(labelFont.getName(), Font.PLAIN, 18));
contentPane.add(titleLabel, BorderLayout.NORTH);
// Get a TextPane ready - a little hack to make it always scroll horizontally
this.textPane = new JTextPane() {
private static final long serialVersionUID = 1L;
public boolean getScrollableTracksViewportWidth() {
return false;
}
public void setSize(Dimension dimension) {
if (dimension.width < getParent().getSize().width) {
dimension.width = getParent().getSize().width;
}
super.setSize(dimension);
}
};
this.textPane.setEnabled(true); this.textPane.setEnabled(true);
this.textPane.setFocusable(false); this.textPane.setFocusable(false);
this.textPane.setEditable(true);
this.textPane.setAutoscrolls(true); this.textPane.setAutoscrolls(true);
this.textPane.setMargin(new Insets(5, 5, 5, 5)); this.textPane.setMargin(new Insets(5, 5, 5, 5));
contentPane.add(this.textPane, BorderLayout.CENTER); contentPane.add(this.textPane, BorderLayout.CENTER);
@ -137,8 +159,13 @@ public class TextObserverWindow extends JFrame implements Observer {
// Add a ScrollPane // Add a ScrollPane
JScrollPane scrollPane = new JScrollPane(this.textPane); JScrollPane scrollPane = new JScrollPane(this.textPane);
scrollPane.setPreferredSize(new Dimension(800, 500)); scrollPane.setPreferredSize(new Dimension(800, 500));
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
contentPane.add(scrollPane, BorderLayout.CENTER); contentPane.add(scrollPane, BorderLayout.CENTER);
// Bottom Panel contains control elements
JPanel bottomPanel = new JPanel();
// Add a checkbox to toggle autoscroll // Add a checkbox to toggle autoscroll
JCheckBox autoscrollCheckbox = new JCheckBox(); JCheckBox autoscrollCheckbox = new JCheckBox();
autoscrollCheckbox.setText("Automatically scroll to bottom"); autoscrollCheckbox.setText("Automatically scroll to bottom");
@ -151,8 +178,35 @@ public class TextObserverWindow extends JFrame implements Observer {
textObserverWindow.setAutoScrollToBottom(checkBox.isSelected()); textObserverWindow.setAutoScrollToBottom(checkBox.isSelected());
} }
}); });
contentPane.add(autoscrollCheckbox, BorderLayout.SOUTH); bottomPanel.add(autoscrollCheckbox);
// Add buttons to increase/decrease font size
JButton increaseFontSizeButton = new JButton("+");
increaseFontSizeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Font currentFont = textObserverWindow.textPane.getFont();
textObserverWindow.textPane.setFont(
new Font(currentFont.getName(), currentFont.getStyle(), currentFont.getSize()+1)
);
}
});
bottomPanel.add(increaseFontSizeButton);
JButton decreaseFontSizeButton = new JButton("-");
decreaseFontSizeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Font currentFont = textObserverWindow.textPane.getFont();
textObserverWindow.textPane.setFont(
new Font(currentFont.getName(), currentFont.getStyle(), currentFont.getSize()-1)
);
}
});
bottomPanel.add(decreaseFontSizeButton);
// Add bottomPanel to contentPane
contentPane.add(bottomPanel, BorderLayout.SOUTH);
this.setVisible(true); this.setVisible(true);
this.pack(); this.pack();
} }
@ -248,7 +302,7 @@ public class TextObserverWindow extends JFrame implements Observer {
tokenIndex++; tokenIndex++;
} }
} }
this.showText("-------------------------------------------------------------------------------- \n", Color.BLACK); this.showText("End of results ----------------------------------------------------------------- \n", Color.BLACK);
} }
/** /**