start and pause buttons
This commit is contained in:
parent
ea4795967a
commit
24ff6c3dde
@ -6,6 +6,11 @@ The configuration is intended to be shared among all the users of project and
|
|||||||
therefore it is assumed to be part of version control checkout.
|
therefore it is assumed to be part of version control checkout.
|
||||||
Without this configuration present, some functionality in the IDE may be limited or fail altogether.
|
Without this configuration present, some functionality in the IDE may be limited or fail altogether.
|
||||||
-->
|
-->
|
||||||
|
<config-data xmlns="http://www.netbeans.org/ns/maven-config-data/1">
|
||||||
|
<configurations>
|
||||||
|
<configuration id="TRelease" profiles=""/>
|
||||||
|
</configurations>
|
||||||
|
</config-data>
|
||||||
<properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
|
<properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
|
||||||
<!--
|
<!--
|
||||||
Properties that influence various parts of the IDE, especially code formatting and the like.
|
Properties that influence various parts of the IDE, especially code formatting and the like.
|
||||||
@ -14,5 +19,6 @@ That way multiple projects can share the same settings (useful for formatting ru
|
|||||||
Any value defined here will override the pom.xml file value but is only applicable to the current project.
|
Any value defined here will override the pom.xml file value but is only applicable to the current project.
|
||||||
-->
|
-->
|
||||||
<netbeans.hint.license>bsd</netbeans.hint.license>
|
<netbeans.hint.license>bsd</netbeans.hint.license>
|
||||||
|
<org-netbeans-modules-whitelist.whitelist-oracle>false</org-netbeans-modules-whitelist.whitelist-oracle>
|
||||||
</properties>
|
</properties>
|
||||||
</project-shared-configuration>
|
</project-shared-configuration>
|
||||||
|
17
nbactions-TRelease.xml
Normal file
17
nbactions-TRelease.xml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<actions>
|
||||||
|
<action>
|
||||||
|
<actionName>run</actionName>
|
||||||
|
<packagings>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
</packagings>
|
||||||
|
<goals>
|
||||||
|
<goal>process-classes</goal>
|
||||||
|
|
||||||
|
</goals>
|
||||||
|
<properties>
|
||||||
|
<jnlp.args>-classpath %classpath ${packageClassName}</jnlp.args>
|
||||||
|
<jnlp.jnlputable>java</jnlp.jnlputable>
|
||||||
|
</properties>
|
||||||
|
</action>
|
||||||
|
</actions>
|
15
nbactions-release-profile.xml
Normal file
15
nbactions-release-profile.xml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<actions>
|
||||||
|
<action>
|
||||||
|
<actionName>run</actionName>
|
||||||
|
<displayName>Tube</displayName>
|
||||||
|
<goals>
|
||||||
|
<goal>process-classes</goal>
|
||||||
|
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:jnlp</goal>
|
||||||
|
</goals>
|
||||||
|
<properties>
|
||||||
|
<exec.args>-classpath %classpath ${packageClassName}</exec.args>
|
||||||
|
<exec.executable>java</exec.executable>
|
||||||
|
</properties>
|
||||||
|
</action>
|
||||||
|
</actions>
|
@ -10,7 +10,36 @@
|
|||||||
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
|
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
|
||||||
</goals>
|
</goals>
|
||||||
<properties>
|
<properties>
|
||||||
<exec.args>-classpath %classpath gui.MainWin</exec.args>
|
<exec.args>-classpath %classpath gui.NewMDIApplication</exec.args>
|
||||||
|
<exec.executable>java</exec.executable>
|
||||||
|
</properties>
|
||||||
|
</action>
|
||||||
|
<action>
|
||||||
|
<actionName>debug</actionName>
|
||||||
|
<packagings>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
</packagings>
|
||||||
|
<goals>
|
||||||
|
<goal>process-classes</goal>
|
||||||
|
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
|
||||||
|
</goals>
|
||||||
|
<properties>
|
||||||
|
<exec.args>-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath gui.NewMDIApplication</exec.args>
|
||||||
|
<exec.executable>java</exec.executable>
|
||||||
|
<jpda.listen>true</jpda.listen>
|
||||||
|
</properties>
|
||||||
|
</action>
|
||||||
|
<action>
|
||||||
|
<actionName>profile</actionName>
|
||||||
|
<packagings>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
</packagings>
|
||||||
|
<goals>
|
||||||
|
<goal>process-classes</goal>
|
||||||
|
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
|
||||||
|
</goals>
|
||||||
|
<properties>
|
||||||
|
<exec.args>-classpath %classpath gui.NewMDIApplication</exec.args>
|
||||||
<exec.executable>java</exec.executable>
|
<exec.executable>java</exec.executable>
|
||||||
</properties>
|
</properties>
|
||||||
</action>
|
</action>
|
||||||
|
7
pom.xml
7
pom.xml
@ -3,14 +3,9 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.cauwersin</groupId>
|
<groupId>com.cauwersin</groupId>
|
||||||
<artifactId>SeSim</artifactId>
|
<artifactId>SeSim</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>0.01</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
|
||||||
<groupId>org.jfree</groupId>
|
|
||||||
<artifactId>jfreechart</artifactId>
|
|
||||||
<version>1.0.19</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
|
@ -6,10 +6,9 @@
|
|||||||
<Color blue="ff" green="ff" id="white" palette="1" red="ff" type="palette"/>
|
<Color blue="ff" green="ff" id="white" palette="1" red="ff" type="palette"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||||
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
|
<Border info="null"/>
|
||||||
<TitledBorder/>
|
|
||||||
</Border>
|
|
||||||
</Property>
|
</Property>
|
||||||
|
<Property name="opaque" type="boolean" value="false"/>
|
||||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
<Dimension value="[300, 300]"/>
|
<Dimension value="[300, 300]"/>
|
||||||
</Property>
|
</Property>
|
||||||
@ -30,12 +29,12 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<EmptySpace min="0" pref="316" max="32767" attributes="0"/>
|
<EmptySpace min="0" pref="300" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<EmptySpace min="0" pref="280" max="32767" attributes="0"/>
|
<EmptySpace min="0" pref="300" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
@ -360,7 +360,8 @@ public class Chart extends javax.swing.JPanel implements QuoteReceiver {
|
|||||||
private void initComponents() {
|
private void initComponents() {
|
||||||
|
|
||||||
setBackground(java.awt.Color.white);
|
setBackground(java.awt.Color.white);
|
||||||
setBorder(javax.swing.BorderFactory.createTitledBorder(""));
|
setBorder(null);
|
||||||
|
setOpaque(false);
|
||||||
setPreferredSize(new java.awt.Dimension(300, 300));
|
setPreferredSize(new java.awt.Dimension(300, 300));
|
||||||
setRequestFocusEnabled(false);
|
setRequestFocusEnabled(false);
|
||||||
|
|
||||||
@ -368,11 +369,11 @@ public class Chart extends javax.swing.JPanel implements QuoteReceiver {
|
|||||||
this.setLayout(layout);
|
this.setLayout(layout);
|
||||||
layout.setHorizontalGroup(
|
layout.setHorizontalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGap(0, 316, Short.MAX_VALUE)
|
.addGap(0, 300, Short.MAX_VALUE)
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGap(0, 280, Short.MAX_VALUE)
|
.addGap(0, 300, Short.MAX_VALUE)
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
@ -3,6 +3,9 @@
|
|||||||
<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
|
<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="defaultCloseOperation" type="int" value="2"/>
|
<Property name="defaultCloseOperation" type="int" value="2"/>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[400, 300]"/>
|
||||||
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<SyntheticProperties>
|
<SyntheticProperties>
|
||||||
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||||
@ -25,14 +28,15 @@
|
|||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="jScrollPane1" pref="603" max="32767" attributes="0"/>
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="jScrollPane1" pref="603" max="32767" attributes="0"/>
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||||
|
<Component id="jButton1" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<EmptySpace min="-2" pref="247" max="-2" attributes="0"/>
|
|
||||||
<Component id="jButton1" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
|
@ -54,6 +54,7 @@ public class AboutDialog extends javax.swing.JDialog {
|
|||||||
jButton1 = new javax.swing.JButton();
|
jButton1 = new javax.swing.JButton();
|
||||||
|
|
||||||
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
|
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
|
||||||
|
setMinimumSize(new java.awt.Dimension(400, 300));
|
||||||
|
|
||||||
jTextPane1.setEditable(false);
|
jTextPane1.setEditable(false);
|
||||||
jTextPane1.setText("/*\n * Copyright (c) 2017, 7u83 <7u83@mail.ru>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */");
|
jTextPane1.setText("/*\n * Copyright (c) 2017, 7u83 <7u83@mail.ru>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */");
|
||||||
@ -72,12 +73,12 @@ public class AboutDialog extends javax.swing.JDialog {
|
|||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 603, Short.MAX_VALUE)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 603, Short.MAX_VALUE)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
|
.addGap(0, 0, Short.MAX_VALUE)
|
||||||
|
.addComponent(jButton1)))
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
.addGroup(layout.createSequentialGroup()
|
|
||||||
.addGap(247, 247, 247)
|
|
||||||
.addComponent(jButton1)
|
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
@ -1,99 +0,0 @@
|
|||||||
package gui;
|
|
||||||
|
|
||||||
import org.jfree.chart.*;
|
|
||||||
import org.jfree.chart.axis.*;
|
|
||||||
import org.jfree.chart.plot.XYPlot;
|
|
||||||
import org.jfree.chart.renderer.xy.CandlestickRenderer;
|
|
||||||
import org.jfree.data.xy.*;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.io.*;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.text.*;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class CandlestickDemo extends JFrame {
|
|
||||||
public CandlestickDemo(String stockSymbol) {
|
|
||||||
super("CandlestickDemo");
|
|
||||||
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
||||||
|
|
||||||
DateAxis domainAxis = new DateAxis("Date");
|
|
||||||
NumberAxis rangeAxis = new NumberAxis("Price");
|
|
||||||
CandlestickRenderer renderer = new CandlestickRenderer();
|
|
||||||
XYDataset dataset = getDataSet(stockSymbol);
|
|
||||||
|
|
||||||
XYPlot mainPlot = new XYPlot(dataset, domainAxis, rangeAxis, renderer);
|
|
||||||
|
|
||||||
//Do some setting up, see the API Doc
|
|
||||||
renderer.setSeriesPaint(0, Color.BLACK);
|
|
||||||
renderer.setDrawVolume(false);
|
|
||||||
rangeAxis.setAutoRangeIncludesZero(false);
|
|
||||||
domainAxis.setTimeline( SegmentedTimeline.newMondayThroughFridayTimeline() );
|
|
||||||
|
|
||||||
//Now create the chart and chart panel
|
|
||||||
JFreeChart chart = new JFreeChart(stockSymbol, null, mainPlot, false);
|
|
||||||
// ChartPanel chartPanel = new ChartPanel(chart);
|
|
||||||
// chartPanel.setPreferredSize(new Dimension(600, 300));
|
|
||||||
|
|
||||||
// this.add(chartPanel);
|
|
||||||
this.pack();
|
|
||||||
}
|
|
||||||
protected AbstractXYDataset getDataSet(String stockSymbol) {
|
|
||||||
//This is the dataset we are going to create
|
|
||||||
DefaultOHLCDataset result = null;
|
|
||||||
//This is the data needed for the dataset
|
|
||||||
OHLCDataItem[] data;
|
|
||||||
|
|
||||||
//This is where we go get the data, replace with your own data source
|
|
||||||
data = getData(stockSymbol);
|
|
||||||
|
|
||||||
//Create a dataset, an Open, High, Low, Close dataset
|
|
||||||
result = new DefaultOHLCDataset(stockSymbol, data);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
//This method uses yahoo finance to get the OHLC data
|
|
||||||
protected OHLCDataItem[] getData(String stockSymbol) {
|
|
||||||
List<OHLCDataItem> dataItems = new ArrayList<OHLCDataItem>();
|
|
||||||
try {
|
|
||||||
String strUrl= "http://ichart.finance.yahoo.com/table.csv?s="+stockSymbol+"&a=0&b=1&c=2008&d=3&e=30&f=2008&ignore=.csv";
|
|
||||||
URL url = new URL(strUrl);
|
|
||||||
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
|
|
||||||
DateFormat df = new SimpleDateFormat("y-M-d");
|
|
||||||
|
|
||||||
String inputLine;
|
|
||||||
in.readLine();
|
|
||||||
while ((inputLine = in.readLine()) != null) {
|
|
||||||
StringTokenizer st = new StringTokenizer(inputLine, ",");
|
|
||||||
|
|
||||||
Date date = df.parse( st.nextToken() );
|
|
||||||
double open = Double.parseDouble( st.nextToken() );
|
|
||||||
double high = Double.parseDouble( st.nextToken() );
|
|
||||||
double low = Double.parseDouble( st.nextToken() );
|
|
||||||
double close = Double.parseDouble( st.nextToken() );
|
|
||||||
double volume = Double.parseDouble( st.nextToken() );
|
|
||||||
double adjClose = Double.parseDouble( st.nextToken() );
|
|
||||||
|
|
||||||
OHLCDataItem item = new OHLCDataItem(date, open, high, low, close, volume);
|
|
||||||
dataItems.add(item);
|
|
||||||
}
|
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
//Data from Yahoo is from newest to oldest. Reverse so it is oldest to newest
|
|
||||||
Collections.reverse(dataItems);
|
|
||||||
|
|
||||||
//Convert the list into an array
|
|
||||||
OHLCDataItem[] data = dataItems.toArray(new OHLCDataItem[dataItems.size()]);
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
new CandlestickDemo("MSFT").setVisible(true);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
|
||||||
|
|
||||||
<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
|
||||||
<AuxValues>
|
|
||||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
|
||||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
|
||||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
|
||||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
|
||||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
|
||||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
|
||||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
|
||||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
|
||||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
|
||||||
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
|
|
||||||
</AuxValues>
|
|
||||||
|
|
||||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
|
||||||
<SubComponents>
|
|
||||||
<Component class="javax.swing.JToggleButton" name="jToggleButton2">
|
|
||||||
<Properties>
|
|
||||||
<Property name="text" type="java.lang.String" value="jToggleButton2"/>
|
|
||||||
</Properties>
|
|
||||||
<Constraints>
|
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
|
|
||||||
<BorderConstraints direction="Center"/>
|
|
||||||
</Constraint>
|
|
||||||
</Constraints>
|
|
||||||
</Component>
|
|
||||||
</SubComponents>
|
|
||||||
</Form>
|
|
@ -1,311 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2016, 7u83 <7u83@mail.ru>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* * Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package gui;
|
|
||||||
|
|
||||||
import sesim.*;
|
|
||||||
import sesim.Exchange;
|
|
||||||
import sesim.Exchange.*;
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.text.DateFormat;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.StringTokenizer;
|
|
||||||
import java.util.Iterator;
|
|
||||||
|
|
||||||
import org.jfree.chart.ChartPanel;
|
|
||||||
import org.jfree.chart.JFreeChart;
|
|
||||||
import org.jfree.chart.axis.DateAxis;
|
|
||||||
import org.jfree.chart.axis.NumberAxis;
|
|
||||||
import org.jfree.chart.axis.SegmentedTimeline;
|
|
||||||
import org.jfree.chart.plot.XYPlot;
|
|
||||||
import org.jfree.chart.renderer.xy.CandlestickRenderer;
|
|
||||||
import org.jfree.data.xy.AbstractXYDataset;
|
|
||||||
import org.jfree.data.xy.DefaultOHLCDataset;
|
|
||||||
import org.jfree.data.xy.OHLCDataItem;
|
|
||||||
import org.jfree.data.xy.XYDataset;
|
|
||||||
|
|
||||||
import sesim.Quote;
|
|
||||||
import java.util.SortedSet;
|
|
||||||
import java.util.TreeSet;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author 7u83 <7u83@mail.ru>
|
|
||||||
*/
|
|
||||||
public class Chart extends javax.swing.JPanel implements QuoteReceiver {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates new form Chart
|
|
||||||
*/
|
|
||||||
public Chart() {
|
|
||||||
initComponents();
|
|
||||||
|
|
||||||
sesim.IDGenerator idgen = new IDGenerator();
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
String stockSymbol = "Schliemanz Koch AG";
|
|
||||||
//String stockSymbol = "MSFT";
|
|
||||||
|
|
||||||
DateAxis domainAxis = new DateAxis("Date");
|
|
||||||
NumberAxis rangeAxis = new NumberAxis("Price");
|
|
||||||
|
|
||||||
CandlestickRenderer renderer = new CandlestickRenderer();
|
|
||||||
|
|
||||||
XYDataset dataset = getDataSet(stockSymbol);
|
|
||||||
|
|
||||||
XYPlot mainPlot = new XYPlot(dataset, domainAxis, rangeAxis, renderer);
|
|
||||||
|
|
||||||
//Do some setting up, see the API Doc
|
|
||||||
renderer.setSeriesPaint(0, Color.BLACK);
|
|
||||||
renderer.setDrawVolume(false);
|
|
||||||
rangeAxis.setAutoRangeIncludesZero(false);
|
|
||||||
domainAxis.setTimeline(SegmentedTimeline.newMondayThroughFridayTimeline());
|
|
||||||
|
|
||||||
//Now create the chart and chart panel
|
|
||||||
JFreeChart chart = new JFreeChart(stockSymbol, null, mainPlot, false);
|
|
||||||
|
|
||||||
ChartPanel chartPanel = new ChartPanel(chart);
|
|
||||||
|
|
||||||
chartPanel.setPreferredSize(new Dimension(500, 270));
|
|
||||||
|
|
||||||
add(chartPanel);
|
|
||||||
System.out.print("Hallo Welt\n");
|
|
||||||
|
|
||||||
if (MainWin.se == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
MainWin.se.addQuoteReceiver(this);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected AbstractXYDataset getDataSet(String stockSymbol) {
|
|
||||||
|
|
||||||
//This is the dataset we are going to create
|
|
||||||
DefaultOHLCDataset result;
|
|
||||||
|
|
||||||
//This is the data needed for the dataset
|
|
||||||
OHLCDataItem[] data;
|
|
||||||
|
|
||||||
//This is where we go get the data, replace with your own data source
|
|
||||||
data = getData();
|
|
||||||
|
|
||||||
//Create a dataset, an Open, High, Low, Close dataset
|
|
||||||
result = new DefaultOHLCDataset(stockSymbol, data);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected OHLCDataItem getOhlcData(long first, long last, SortedSet<Quote> quotes) {
|
|
||||||
|
|
||||||
Quote s = new Quote();
|
|
||||||
|
|
||||||
s.time = first;
|
|
||||||
|
|
||||||
SortedSet<Quote> l = quotes.tailSet(s);
|
|
||||||
|
|
||||||
double open = 0;
|
|
||||||
double high = 0;
|
|
||||||
double low = 0;
|
|
||||||
double close = 0;
|
|
||||||
double volume = 0;
|
|
||||||
|
|
||||||
Iterator<Quote> it = l.iterator();
|
|
||||||
|
|
||||||
Quote q;
|
|
||||||
|
|
||||||
if (it.hasNext()) {
|
|
||||||
q = it.next();
|
|
||||||
open = q.price;
|
|
||||||
high = q.price;
|
|
||||||
low = q.price;
|
|
||||||
volume = q.volume;
|
|
||||||
} else {
|
|
||||||
q = new Quote();
|
|
||||||
}
|
|
||||||
|
|
||||||
while (it.hasNext() && q.time < last) {
|
|
||||||
q = it.next();
|
|
||||||
|
|
||||||
if (q.price > high) {
|
|
||||||
high = q.price;
|
|
||||||
}
|
|
||||||
if (q.price < low) {
|
|
||||||
low = q.price;
|
|
||||||
}
|
|
||||||
|
|
||||||
volume += q.volume;
|
|
||||||
|
|
||||||
}
|
|
||||||
close = q.price;
|
|
||||||
|
|
||||||
Date date = new Date(first);
|
|
||||||
return new OHLCDataItem(
|
|
||||||
date, open, high, low, close, volume
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected OHLCDataItem[] getData() {
|
|
||||||
|
|
||||||
List<OHLCDataItem> data = new ArrayList<>();
|
|
||||||
|
|
||||||
long ct;
|
|
||||||
ct = Exchange.getCurrentTimeSeconds();
|
|
||||||
|
|
||||||
int step=5;
|
|
||||||
long start = (ct - 60)/step*step;
|
|
||||||
|
|
||||||
|
|
||||||
SortedSet<Quote> h = Globals.se.getQuoteHistory(start);
|
|
||||||
|
|
||||||
for (long i = start * 1000; i < ct * 1000; i += step * 1000) {
|
|
||||||
OHLCDataItem d = getOhlcData(i, i + step * 1000, h);
|
|
||||||
|
|
||||||
|
|
||||||
data.add(d);
|
|
||||||
}
|
|
||||||
|
|
||||||
// System.out.print(data.size() + "\n");
|
|
||||||
// System.exit(0);
|
|
||||||
|
|
||||||
return data.toArray(new OHLCDataItem[data.size()]);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//This method uses yahoo finance to get the OHLC data
|
|
||||||
protected OHLCDataItem[] getData_old() {
|
|
||||||
String stockSymbol = "MSFT";
|
|
||||||
List<OHLCDataItem> dataItems = new ArrayList<OHLCDataItem>();
|
|
||||||
try {
|
|
||||||
String strUrl = "http://ichart.finance.yahoo.com/table.csv?s=" + stockSymbol + "&a=0&b=1&c=2008&d=3&e=30&f=2008&ignore=.csv";
|
|
||||||
URL url = new URL(strUrl);
|
|
||||||
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
|
|
||||||
DateFormat df = new SimpleDateFormat("y-M-d");
|
|
||||||
|
|
||||||
String inputLine;
|
|
||||||
in.readLine();
|
|
||||||
while ((inputLine = in.readLine()) != null) {
|
|
||||||
StringTokenizer st = new StringTokenizer(inputLine, ",");
|
|
||||||
|
|
||||||
Date date = df.parse(st.nextToken());
|
|
||||||
double open = Double.parseDouble(st.nextToken());
|
|
||||||
double high = Double.parseDouble(st.nextToken());
|
|
||||||
double low = Double.parseDouble(st.nextToken());
|
|
||||||
double close = Double.parseDouble(st.nextToken());
|
|
||||||
double volume = Double.parseDouble(st.nextToken());
|
|
||||||
double adjClose = Double.parseDouble(st.nextToken());
|
|
||||||
|
|
||||||
OHLCDataItem item = new OHLCDataItem(date, open, high, low, close, volume);
|
|
||||||
dataItems.add(item);
|
|
||||||
}
|
|
||||||
in.close();
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
//Data from Yahoo is from newest to oldest. Reverse so it is oldest to newest
|
|
||||||
Collections.reverse(dataItems);
|
|
||||||
|
|
||||||
//Convert the list into an array
|
|
||||||
OHLCDataItem[] data = dataItems.toArray(new OHLCDataItem[dataItems.size()]);
|
|
||||||
|
|
||||||
System.out.print("Return oghls old data items\n");
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is called from within the constructor to initialize the form.
|
|
||||||
* WARNING: Do NOT modify this code. The content of this method is always
|
|
||||||
* regenerated by the Form Editor.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
|
||||||
private void initComponents() {
|
|
||||||
|
|
||||||
jToggleButton2 = new javax.swing.JToggleButton();
|
|
||||||
|
|
||||||
setLayout(new java.awt.BorderLayout());
|
|
||||||
|
|
||||||
jToggleButton2.setText("jToggleButton2");
|
|
||||||
add(jToggleButton2, java.awt.BorderLayout.CENTER);
|
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
|
||||||
|
|
||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
|
||||||
private javax.swing.JToggleButton jToggleButton2;
|
|
||||||
// End of variables declaration//GEN-END:variables
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void UpdateQuote(Quote q) {
|
|
||||||
|
|
||||||
// q.print();
|
|
||||||
long ct;
|
|
||||||
ct = Exchange.getCurrentTimeSeconds();
|
|
||||||
|
|
||||||
|
|
||||||
OHLCDataItem[] data = this.getData();
|
|
||||||
OHLCDataItem di=data[data.length-1];
|
|
||||||
|
|
||||||
System.out.print(
|
|
||||||
String.format(
|
|
||||||
"O:%.2f H:%.2f L:%.2f C:%.2f (%d)\n",
|
|
||||||
|
|
||||||
|
|
||||||
di.getOpen(),
|
|
||||||
di.getHigh(),
|
|
||||||
di.getLow(),
|
|
||||||
di.getClose(),
|
|
||||||
data.length
|
|
||||||
)
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
long start = (ct - 60)/5*5;
|
|
||||||
SortedSet<Quote> h = Globals.se.getQuoteHistory(start);
|
|
||||||
|
|
||||||
System.out.print("Number of quotes" + start + ":" + ct + "\n");
|
|
||||||
System.out.print("Number of quotes:" + h.size() + "\n");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* SortedSet h = MainWin.se.getQuoteHistory(60);
|
|
||||||
System.out.print(
|
|
||||||
"SortedSet size:"
|
|
||||||
+ h.size()
|
|
||||||
+ "\n"
|
|
||||||
);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,130 +0,0 @@
|
|||||||
/*
|
|
||||||
* To change this license header, choose License Headers in Project Properties.
|
|
||||||
* To change this template file, choose Tools | Templates
|
|
||||||
* and open the template in the editor.
|
|
||||||
*/
|
|
||||||
package gui;
|
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
|
||||||
import java.awt.EventQueue;
|
|
||||||
import java.awt.FlowLayout;
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.util.Random;
|
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JComboBox;
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.Timer;
|
|
||||||
import org.jfree.chart.ChartFactory;
|
|
||||||
import org.jfree.chart.ChartPanel;
|
|
||||||
import org.jfree.chart.JFreeChart;
|
|
||||||
import org.jfree.chart.axis.ValueAxis;
|
|
||||||
import org.jfree.chart.plot.XYPlot;
|
|
||||||
import org.jfree.data.time.DynamicTimeSeriesCollection;
|
|
||||||
import org.jfree.data.time.Second;
|
|
||||||
import org.jfree.data.xy.XYDataset;
|
|
||||||
import org.jfree.ui.ApplicationFrame;
|
|
||||||
import org.jfree.ui.RefineryUtilities;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see http://stackoverflow.com/questions/5048852
|
|
||||||
*/
|
|
||||||
public class DTSCTest extends ApplicationFrame {
|
|
||||||
|
|
||||||
private static final String TITLE = "Dynamic Series";
|
|
||||||
private static final String START = "Start";
|
|
||||||
private static final String STOP = "Stop";
|
|
||||||
private static final float MINMAX = 300;
|
|
||||||
private static final int COUNT = 2 * 60;
|
|
||||||
private static final int FAST = 100;
|
|
||||||
private static final int SLOW = FAST * 5;
|
|
||||||
private static final Random RANDOM = new Random();
|
|
||||||
private Timer timer;
|
|
||||||
|
|
||||||
public DTSCTest(final String title) {
|
|
||||||
super(title);
|
|
||||||
final DynamicTimeSeriesCollection dataset
|
|
||||||
= new DynamicTimeSeriesCollection(1, COUNT, new Second());
|
|
||||||
dataset.setTimeBase(new Second(0, 0, 0, 1, 1, 2011));
|
|
||||||
dataset.addSeries(gaussianData(), 0, "Gaussian data");
|
|
||||||
JFreeChart chart = createChart(dataset);
|
|
||||||
|
|
||||||
final JButton run = new JButton(STOP);
|
|
||||||
run.addActionListener((ActionEvent e) -> {
|
|
||||||
String cmd = e.getActionCommand();
|
|
||||||
if (STOP.equals(cmd)) {
|
|
||||||
timer.stop();
|
|
||||||
run.setText(START);
|
|
||||||
} else {
|
|
||||||
timer.start();
|
|
||||||
run.setText(STOP);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
final JComboBox combo = new JComboBox();
|
|
||||||
combo.addItem("Fast");
|
|
||||||
combo.addItem("Slow");
|
|
||||||
combo.addActionListener((ActionEvent e) -> {
|
|
||||||
if ("Fast".equals(combo.getSelectedItem())) {
|
|
||||||
timer.setDelay(FAST);
|
|
||||||
} else {
|
|
||||||
timer.setDelay(SLOW);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.add(new ChartPanel(chart), BorderLayout.CENTER);
|
|
||||||
JPanel btnPanel = new JPanel(new FlowLayout());
|
|
||||||
// btnPanel.add(run);
|
|
||||||
// btnPanel.add(combo);
|
|
||||||
this.add(btnPanel, BorderLayout.SOUTH);
|
|
||||||
|
|
||||||
timer = new Timer(FAST, new ActionListener() {
|
|
||||||
|
|
||||||
float[] newData = new float[1];
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
newData[0] = randomValue();
|
|
||||||
dataset.advanceTime();
|
|
||||||
dataset.appendData(newData);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private float randomValue() {
|
|
||||||
return (float) (RANDOM.nextGaussian() * MINMAX / 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
private float[] gaussianData() {
|
|
||||||
float[] a = new float[COUNT];
|
|
||||||
for (int i = 0; i < a.length; i++) {
|
|
||||||
a[i] = randomValue();
|
|
||||||
}
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
private JFreeChart createChart(final XYDataset dataset) {
|
|
||||||
final JFreeChart result = ChartFactory.createTimeSeriesChart(
|
|
||||||
TITLE, "hh:mm:ss", "milliVolts", dataset, true, true, false);
|
|
||||||
final XYPlot plot = result.getXYPlot();
|
|
||||||
ValueAxis domain = plot.getDomainAxis();
|
|
||||||
domain.setAutoRange(true);
|
|
||||||
ValueAxis range = plot.getRangeAxis();
|
|
||||||
range.setRange(-MINMAX, MINMAX);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void start() {
|
|
||||||
timer.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(final String[] args) {
|
|
||||||
EventQueue.invokeLater(() -> {
|
|
||||||
DTSCTest demo = new DTSCTest(TITLE);
|
|
||||||
demo.pack();
|
|
||||||
RefineryUtilities.centerFrameOnScreen(demo);
|
|
||||||
demo.setVisible(true);
|
|
||||||
demo.start();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
@ -52,7 +52,7 @@ public class MainWin extends javax.swing.JFrame {
|
|||||||
this.setLocationRelativeTo(this);
|
this.setLocationRelativeTo(this);
|
||||||
|
|
||||||
|
|
||||||
double aid1 = Globals.se.createAccount(100, 100);
|
double aid1 = Globals.se.createAccount(100, 100);
|
||||||
double aid2 = Globals.se.createAccount(1000, 100);
|
double aid2 = Globals.se.createAccount(1000, 100);
|
||||||
|
|
||||||
/* AccountData a1 = se.getAccountData(aid1);
|
/* AccountData a1 = se.getAccountData(aid1);
|
||||||
|
@ -38,6 +38,15 @@
|
|||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="exitMenuItemActionPerformed"/>
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="exitMenuItemActionPerformed"/>
|
||||||
</Events>
|
</Events>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
<MenuItem class="javax.swing.JMenuItem" name="jMenuItem1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Run"/>
|
||||||
|
<Property name="hideActionText" type="boolean" value="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jMenuItem1ActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Menu>
|
</Menu>
|
||||||
<Menu class="javax.swing.JMenu" name="editMenu">
|
<Menu class="javax.swing.JMenu" name="editMenu">
|
||||||
@ -70,6 +79,30 @@
|
|||||||
<Property name="text" type="java.lang.String" value="Delete"/>
|
<Property name="text" type="java.lang.String" value="Delete"/>
|
||||||
</Properties>
|
</Properties>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
<MenuItem class="javax.swing.JMenuItem" name="editPreferences">
|
||||||
|
<Properties>
|
||||||
|
<Property name="mnemonic" type="int" value="112"/>
|
||||||
|
<Property name="text" type="java.lang.String" value="Preferences ..."/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="editPreferencesActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
|
</SubComponents>
|
||||||
|
</Menu>
|
||||||
|
<Menu class="javax.swing.JMenu" name="jMenu1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="View"/>
|
||||||
|
</Properties>
|
||||||
|
<SubComponents>
|
||||||
|
<MenuItem class="javax.swing.JMenuItem" name="jMenuItem2">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Traders"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jMenuItem2ActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Menu>
|
</Menu>
|
||||||
<Menu class="javax.swing.JMenu" name="helpMenu">
|
<Menu class="javax.swing.JMenu" name="helpMenu">
|
||||||
@ -89,6 +122,9 @@
|
|||||||
<Property name="mnemonic" type="int" value="97"/>
|
<Property name="mnemonic" type="int" value="97"/>
|
||||||
<Property name="text" type="java.lang.String" value="About"/>
|
<Property name="text" type="java.lang.String" value="About"/>
|
||||||
</Properties>
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="aboutMenuItemActionPerformed"/>
|
||||||
|
</Events>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Menu>
|
</Menu>
|
||||||
@ -97,6 +133,12 @@
|
|||||||
</NonVisualComponents>
|
</NonVisualComponents>
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="defaultCloseOperation" type="int" value="3"/>
|
<Property name="defaultCloseOperation" type="int" value="3"/>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[640, 480]"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[800, 561]"/>
|
||||||
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<SyntheticProperties>
|
<SyntheticProperties>
|
||||||
<SyntheticProperty name="menuBar" type="java.lang.String" value="menuBar"/>
|
<SyntheticProperty name="menuBar" type="java.lang.String" value="menuBar"/>
|
||||||
@ -118,13 +160,92 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<EmptySpace min="0" pref="913" max="32767" attributes="0"/>
|
<Component id="jToolBar1" alignment="0" pref="913" max="32767" attributes="0"/>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="orderBookPanel1" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="jScrollPane1" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<EmptySpace min="0" pref="554" max="32767" attributes="0"/>
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="jToolBar1" min="-2" pref="60" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="orderBookPanel1" max="32767" attributes="0"/>
|
||||||
|
<Component id="jScrollPane1" pref="466" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Container class="javax.swing.JToolBar" name="jToolBar1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="floatable" type="boolean" value="false"/>
|
||||||
|
<Property name="rollover" type="boolean" value="true"/>
|
||||||
|
</Properties>
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JButton" name="jButton1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||||
|
<Image iconType="3" name="/icons/run.gif"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" value="Run sim!"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Run the simmulation"/>
|
||||||
|
<Property name="focusable" type="boolean" value="false"/>
|
||||||
|
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||||
|
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="jButton2">
|
||||||
|
<Properties>
|
||||||
|
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||||
|
<Image iconType="3" name="/icons/pause.gif"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" value="Pause"/>
|
||||||
|
<Property name="focusable" type="boolean" value="false"/>
|
||||||
|
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||||
|
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton2ActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Container class="chart.Chart" name="chart2">
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<EmptySpace min="0" pref="669" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<EmptySpace min="0" pref="460" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
</Container>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Component class="gui.OrderBookPanel" name="orderBookPanel1">
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
</Form>
|
</Form>
|
||||||
|
@ -25,6 +25,12 @@
|
|||||||
*/
|
*/
|
||||||
package gui;
|
package gui;
|
||||||
|
|
||||||
|
import java.awt.Dialog;
|
||||||
|
import sesim.AutoTrader;
|
||||||
|
import sesim.AutoTraderConfig;
|
||||||
|
import sesim.Exchange;
|
||||||
|
import traders.RandomTraderConfig;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author 7u83 <7u83@mail.ru>
|
* @author 7u83 <7u83@mail.ru>
|
||||||
@ -36,6 +42,28 @@ public class NewMDIApplication extends javax.swing.JFrame {
|
|||||||
*/
|
*/
|
||||||
public NewMDIApplication() {
|
public NewMDIApplication() {
|
||||||
initComponents();
|
initComponents();
|
||||||
|
this.setLocationRelativeTo(this);
|
||||||
|
this.setTitle("SeSim - Stock Exchange Simmulator");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startTraders() {
|
||||||
|
|
||||||
|
AutoTraderConfig cfg1 = new RandomTraderConfig();
|
||||||
|
AutoTrader rt1 = cfg1.createTrader(Globals.se, 1000000, 1000000);
|
||||||
|
Globals.se.traders.add(rt1);
|
||||||
|
rt1.setName("Alice");
|
||||||
|
rt1.start();
|
||||||
|
|
||||||
|
AutoTraderConfig cfg2 = new RandomTraderConfig();
|
||||||
|
|
||||||
|
for (int i = 0; i < 30; i++) {
|
||||||
|
AutoTrader randt = cfg2.createTrader(Globals.se, 100000, 100000);
|
||||||
|
|
||||||
|
Globals.se.traders.add(randt);
|
||||||
|
randt.setName("Bob");
|
||||||
|
randt.start();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -47,22 +75,75 @@ public class NewMDIApplication extends javax.swing.JFrame {
|
|||||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
private void initComponents() {
|
private void initComponents() {
|
||||||
|
|
||||||
|
jToolBar1 = new javax.swing.JToolBar();
|
||||||
|
jButton1 = new javax.swing.JButton();
|
||||||
|
jButton2 = new javax.swing.JButton();
|
||||||
|
jScrollPane1 = new javax.swing.JScrollPane();
|
||||||
|
chart2 = new chart.Chart();
|
||||||
|
orderBookPanel1 = new gui.OrderBookPanel();
|
||||||
menuBar = new javax.swing.JMenuBar();
|
menuBar = new javax.swing.JMenuBar();
|
||||||
fileMenu = new javax.swing.JMenu();
|
fileMenu = new javax.swing.JMenu();
|
||||||
openMenuItem = new javax.swing.JMenuItem();
|
openMenuItem = new javax.swing.JMenuItem();
|
||||||
saveMenuItem = new javax.swing.JMenuItem();
|
saveMenuItem = new javax.swing.JMenuItem();
|
||||||
saveAsMenuItem = new javax.swing.JMenuItem();
|
saveAsMenuItem = new javax.swing.JMenuItem();
|
||||||
exitMenuItem = new javax.swing.JMenuItem();
|
exitMenuItem = new javax.swing.JMenuItem();
|
||||||
|
jMenuItem1 = new javax.swing.JMenuItem();
|
||||||
editMenu = new javax.swing.JMenu();
|
editMenu = new javax.swing.JMenu();
|
||||||
cutMenuItem = new javax.swing.JMenuItem();
|
cutMenuItem = new javax.swing.JMenuItem();
|
||||||
copyMenuItem = new javax.swing.JMenuItem();
|
copyMenuItem = new javax.swing.JMenuItem();
|
||||||
pasteMenuItem = new javax.swing.JMenuItem();
|
pasteMenuItem = new javax.swing.JMenuItem();
|
||||||
deleteMenuItem = new javax.swing.JMenuItem();
|
deleteMenuItem = new javax.swing.JMenuItem();
|
||||||
|
editPreferences = new javax.swing.JMenuItem();
|
||||||
|
jMenu1 = new javax.swing.JMenu();
|
||||||
|
jMenuItem2 = new javax.swing.JMenuItem();
|
||||||
helpMenu = new javax.swing.JMenu();
|
helpMenu = new javax.swing.JMenu();
|
||||||
contentMenuItem = new javax.swing.JMenuItem();
|
contentMenuItem = new javax.swing.JMenuItem();
|
||||||
aboutMenuItem = new javax.swing.JMenuItem();
|
aboutMenuItem = new javax.swing.JMenuItem();
|
||||||
|
|
||||||
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
|
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
|
||||||
|
setMinimumSize(new java.awt.Dimension(640, 480));
|
||||||
|
setPreferredSize(new java.awt.Dimension(800, 561));
|
||||||
|
|
||||||
|
jToolBar1.setFloatable(false);
|
||||||
|
jToolBar1.setRollover(true);
|
||||||
|
|
||||||
|
jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/run.gif"))); // NOI18N
|
||||||
|
jButton1.setText("Run sim!");
|
||||||
|
jButton1.setToolTipText("Run the simmulation");
|
||||||
|
jButton1.setFocusable(false);
|
||||||
|
jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
|
||||||
|
jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
|
||||||
|
jButton1.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
jButton1ActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jToolBar1.add(jButton1);
|
||||||
|
|
||||||
|
jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/pause.gif"))); // NOI18N
|
||||||
|
jButton2.setText("Pause");
|
||||||
|
jButton2.setFocusable(false);
|
||||||
|
jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
|
||||||
|
jButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
|
||||||
|
jButton2.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
jButton2ActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jToolBar1.add(jButton2);
|
||||||
|
|
||||||
|
javax.swing.GroupLayout chart2Layout = new javax.swing.GroupLayout(chart2);
|
||||||
|
chart2.setLayout(chart2Layout);
|
||||||
|
chart2Layout.setHorizontalGroup(
|
||||||
|
chart2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGap(0, 669, Short.MAX_VALUE)
|
||||||
|
);
|
||||||
|
chart2Layout.setVerticalGroup(
|
||||||
|
chart2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGap(0, 460, Short.MAX_VALUE)
|
||||||
|
);
|
||||||
|
|
||||||
|
jScrollPane1.setViewportView(chart2);
|
||||||
|
|
||||||
fileMenu.setMnemonic('f');
|
fileMenu.setMnemonic('f');
|
||||||
fileMenu.setText("File");
|
fileMenu.setText("File");
|
||||||
@ -89,6 +170,15 @@ public class NewMDIApplication extends javax.swing.JFrame {
|
|||||||
});
|
});
|
||||||
fileMenu.add(exitMenuItem);
|
fileMenu.add(exitMenuItem);
|
||||||
|
|
||||||
|
jMenuItem1.setText("Run");
|
||||||
|
jMenuItem1.setHideActionText(true);
|
||||||
|
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
jMenuItem1ActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
fileMenu.add(jMenuItem1);
|
||||||
|
|
||||||
menuBar.add(fileMenu);
|
menuBar.add(fileMenu);
|
||||||
|
|
||||||
editMenu.setMnemonic('e');
|
editMenu.setMnemonic('e');
|
||||||
@ -110,8 +200,29 @@ public class NewMDIApplication extends javax.swing.JFrame {
|
|||||||
deleteMenuItem.setText("Delete");
|
deleteMenuItem.setText("Delete");
|
||||||
editMenu.add(deleteMenuItem);
|
editMenu.add(deleteMenuItem);
|
||||||
|
|
||||||
|
editPreferences.setMnemonic('p');
|
||||||
|
editPreferences.setText("Preferences ...");
|
||||||
|
editPreferences.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
editPreferencesActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
editMenu.add(editPreferences);
|
||||||
|
|
||||||
menuBar.add(editMenu);
|
menuBar.add(editMenu);
|
||||||
|
|
||||||
|
jMenu1.setText("View");
|
||||||
|
|
||||||
|
jMenuItem2.setText("Traders");
|
||||||
|
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
jMenuItem2ActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jMenu1.add(jMenuItem2);
|
||||||
|
|
||||||
|
menuBar.add(jMenu1);
|
||||||
|
|
||||||
helpMenu.setMnemonic('h');
|
helpMenu.setMnemonic('h');
|
||||||
helpMenu.setText("Help");
|
helpMenu.setText("Help");
|
||||||
|
|
||||||
@ -121,6 +232,11 @@ public class NewMDIApplication extends javax.swing.JFrame {
|
|||||||
|
|
||||||
aboutMenuItem.setMnemonic('a');
|
aboutMenuItem.setMnemonic('a');
|
||||||
aboutMenuItem.setText("About");
|
aboutMenuItem.setText("About");
|
||||||
|
aboutMenuItem.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
aboutMenuItemActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
helpMenu.add(aboutMenuItem);
|
helpMenu.add(aboutMenuItem);
|
||||||
|
|
||||||
menuBar.add(helpMenu);
|
menuBar.add(helpMenu);
|
||||||
@ -131,11 +247,23 @@ public class NewMDIApplication extends javax.swing.JFrame {
|
|||||||
getContentPane().setLayout(layout);
|
getContentPane().setLayout(layout);
|
||||||
layout.setHorizontalGroup(
|
layout.setHorizontalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGap(0, 913, Short.MAX_VALUE)
|
.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 913, Short.MAX_VALUE)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addComponent(orderBookPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(jScrollPane1)
|
||||||
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGap(0, 554, Short.MAX_VALUE)
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(orderBookPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 466, Short.MAX_VALUE))
|
||||||
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
|
|
||||||
pack();
|
pack();
|
||||||
@ -145,32 +273,40 @@ public class NewMDIApplication extends javax.swing.JFrame {
|
|||||||
System.exit(0);
|
System.exit(0);
|
||||||
}//GEN-LAST:event_exitMenuItemActionPerformed
|
}//GEN-LAST:event_exitMenuItemActionPerformed
|
||||||
|
|
||||||
|
private void aboutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutMenuItemActionPerformed
|
||||||
|
Dialog d = new gui.AboutDialog(this, rootPaneCheckingEnabled);
|
||||||
|
d.setVisible(rootPaneCheckingEnabled);
|
||||||
|
|
||||||
|
}//GEN-LAST:event_aboutMenuItemActionPerformed
|
||||||
|
|
||||||
|
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
|
||||||
|
this.startTraders();
|
||||||
|
Globals.se.timer.start();
|
||||||
|
}//GEN-LAST:event_jButton1ActionPerformed
|
||||||
|
|
||||||
|
private void editPreferencesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editPreferencesActionPerformed
|
||||||
|
Dialog d = new gui.EditPreferencesDialog(this, rootPaneCheckingEnabled);
|
||||||
|
d.setVisible(rootPaneCheckingEnabled);
|
||||||
|
}//GEN-LAST:event_editPreferencesActionPerformed
|
||||||
|
|
||||||
|
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
|
||||||
|
// TODO add your handling code here:
|
||||||
|
}//GEN-LAST:event_jMenuItem1ActionPerformed
|
||||||
|
|
||||||
|
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
|
||||||
|
TraderListDialog d = new TraderListDialog(this,false);
|
||||||
|
d.setVisible(rootPaneCheckingEnabled);
|
||||||
|
}//GEN-LAST:event_jMenuItem2ActionPerformed
|
||||||
|
|
||||||
|
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
|
||||||
|
Globals.se.timer.pause();
|
||||||
|
}//GEN-LAST:event_jButton2ActionPerformed
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param args the command line arguments
|
* @param args the command line arguments
|
||||||
*/
|
*/
|
||||||
public static void main(String args[]) {
|
public static void main(String args[]) {
|
||||||
/* Set the Nimbus look and feel */
|
Globals.se = new Exchange();
|
||||||
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
|
|
||||||
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
|
|
||||||
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
|
|
||||||
*/
|
|
||||||
try {
|
|
||||||
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
|
|
||||||
if ("Nimbus".equals(info.getName())) {
|
|
||||||
javax.swing.UIManager.setLookAndFeel(info.getClassName());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (ClassNotFoundException ex) {
|
|
||||||
java.util.logging.Logger.getLogger(NewMDIApplication.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
|
||||||
} catch (InstantiationException ex) {
|
|
||||||
java.util.logging.Logger.getLogger(NewMDIApplication.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
|
||||||
} catch (IllegalAccessException ex) {
|
|
||||||
java.util.logging.Logger.getLogger(NewMDIApplication.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
|
||||||
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
|
|
||||||
java.util.logging.Logger.getLogger(NewMDIApplication.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
|
||||||
}
|
|
||||||
//</editor-fold>
|
|
||||||
|
|
||||||
/* Create and display the form */
|
/* Create and display the form */
|
||||||
java.awt.EventQueue.invokeLater(new Runnable() {
|
java.awt.EventQueue.invokeLater(new Runnable() {
|
||||||
@ -182,16 +318,26 @@ public class NewMDIApplication extends javax.swing.JFrame {
|
|||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
private javax.swing.JMenuItem aboutMenuItem;
|
private javax.swing.JMenuItem aboutMenuItem;
|
||||||
|
private chart.Chart chart2;
|
||||||
private javax.swing.JMenuItem contentMenuItem;
|
private javax.swing.JMenuItem contentMenuItem;
|
||||||
private javax.swing.JMenuItem copyMenuItem;
|
private javax.swing.JMenuItem copyMenuItem;
|
||||||
private javax.swing.JMenuItem cutMenuItem;
|
private javax.swing.JMenuItem cutMenuItem;
|
||||||
private javax.swing.JMenuItem deleteMenuItem;
|
private javax.swing.JMenuItem deleteMenuItem;
|
||||||
private javax.swing.JMenu editMenu;
|
private javax.swing.JMenu editMenu;
|
||||||
|
private javax.swing.JMenuItem editPreferences;
|
||||||
private javax.swing.JMenuItem exitMenuItem;
|
private javax.swing.JMenuItem exitMenuItem;
|
||||||
private javax.swing.JMenu fileMenu;
|
private javax.swing.JMenu fileMenu;
|
||||||
private javax.swing.JMenu helpMenu;
|
private javax.swing.JMenu helpMenu;
|
||||||
|
private javax.swing.JButton jButton1;
|
||||||
|
private javax.swing.JButton jButton2;
|
||||||
|
private javax.swing.JMenu jMenu1;
|
||||||
|
private javax.swing.JMenuItem jMenuItem1;
|
||||||
|
private javax.swing.JMenuItem jMenuItem2;
|
||||||
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
|
private javax.swing.JToolBar jToolBar1;
|
||||||
private javax.swing.JMenuBar menuBar;
|
private javax.swing.JMenuBar menuBar;
|
||||||
private javax.swing.JMenuItem openMenuItem;
|
private javax.swing.JMenuItem openMenuItem;
|
||||||
|
private gui.OrderBookPanel orderBookPanel1;
|
||||||
private javax.swing.JMenuItem pasteMenuItem;
|
private javax.swing.JMenuItem pasteMenuItem;
|
||||||
private javax.swing.JMenuItem saveAsMenuItem;
|
private javax.swing.JMenuItem saveAsMenuItem;
|
||||||
private javax.swing.JMenuItem saveMenuItem;
|
private javax.swing.JMenuItem saveMenuItem;
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
|
||||||
|
|
||||||
<Form version="1.2" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
|
||||||
<AuxValues>
|
|
||||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
|
||||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
|
||||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
|
||||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
|
||||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
|
||||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
|
||||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
|
||||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
|
||||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
|
||||||
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
|
|
||||||
</AuxValues>
|
|
||||||
|
|
||||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
|
||||||
</Form>
|
|
@ -1,128 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2016, 7u83 <7u83@mail.ru>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* * Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* * Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package gui;
|
|
||||||
|
|
||||||
//import static Gui.SimpleJFreeDemo.createDemoPanel;
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
import org.jfree.chart.ChartFactory;
|
|
||||||
import org.jfree.chart.ChartPanel;
|
|
||||||
import org.jfree.chart.JFreeChart;
|
|
||||||
import org.jfree.chart.plot.PlotOrientation;
|
|
||||||
import org.jfree.chart.plot.XYPlot;
|
|
||||||
import org.jfree.data.function.Function2D;
|
|
||||||
import org.jfree.data.general.DatasetUtilities;
|
|
||||||
import org.jfree.data.xy.XYDataset;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author 7u83 <7u83@mail.ru>
|
|
||||||
*/
|
|
||||||
public class NewPanel extends javax.swing.JPanel {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates new form NewPanel
|
|
||||||
*/
|
|
||||||
public NewPanel() {
|
|
||||||
initComponents();
|
|
||||||
|
|
||||||
initComponents();
|
|
||||||
JPanel chartPanel = createDemoPanel();
|
|
||||||
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
|
|
||||||
add(chartPanel);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static JFreeChart createChart(XYDataset dataset) {
|
|
||||||
// create the chart...
|
|
||||||
JFreeChart chart = ChartFactory.createXYLineChart(
|
|
||||||
"Function2DDemo1 ", // chart title
|
|
||||||
"X", // x axis label
|
|
||||||
"Y", // y axis label
|
|
||||||
dataset, // data
|
|
||||||
PlotOrientation.VERTICAL,
|
|
||||||
true, // include legend
|
|
||||||
true, // tooltips
|
|
||||||
false // urls
|
|
||||||
);
|
|
||||||
|
|
||||||
XYPlot plot = (XYPlot) chart.getPlot();
|
|
||||||
plot.getDomainAxis().setLowerMargin(0.0);
|
|
||||||
plot.getDomainAxis().setUpperMargin(0.0);
|
|
||||||
return chart;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a sample dataset.
|
|
||||||
*
|
|
||||||
* @return A sample dataset.
|
|
||||||
*/
|
|
||||||
public static XYDataset createDataset() {
|
|
||||||
XYDataset result = DatasetUtilities.sampleFunction2D(new X2(),
|
|
||||||
-4.0, 4.0, 40, "f(x)");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a panel for the demo (used by SuperDemo.java).
|
|
||||||
*
|
|
||||||
* @return A panel.
|
|
||||||
*/
|
|
||||||
public static JPanel createDemoPanel() {
|
|
||||||
JFreeChart chart = createChart(createDataset());
|
|
||||||
return new ChartPanel(chart);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A simple function.
|
|
||||||
*/
|
|
||||||
static class X2 implements Function2D {
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.jfree.data.function.Function2D#getValue(double)
|
|
||||||
*/
|
|
||||||
public double getValue(double x) {
|
|
||||||
return x * x + 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is called from within the constructor to initialize the form.
|
|
||||||
* WARNING: Do NOT modify this code. The content of this method is always
|
|
||||||
* regenerated by the Form Editor.
|
|
||||||
*/
|
|
||||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
|
||||||
private void initComponents() {
|
|
||||||
|
|
||||||
setLayout(new java.awt.BorderLayout());
|
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
|
||||||
|
|
||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
|
||||||
// End of variables declaration//GEN-END:variables
|
|
||||||
}
|
|
@ -97,6 +97,16 @@ public class Scheduler extends Thread {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean pause=false;
|
||||||
|
|
||||||
|
public void pause(){
|
||||||
|
pause=!pause;
|
||||||
|
synchronized(this){
|
||||||
|
this.notify();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public long fireEvent(TimerTask e) {
|
public long fireEvent(TimerTask e) {
|
||||||
return e.timerTask();
|
return e.timerTask();
|
||||||
}
|
}
|
||||||
@ -141,6 +151,9 @@ public class Scheduler extends Thread {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
while (!halt) {
|
while (!halt) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
long wtime = runEvents();
|
long wtime = runEvents();
|
||||||
if (wtime == 0) {
|
if (wtime == 0) {
|
||||||
continue;
|
continue;
|
||||||
@ -148,6 +161,10 @@ public class Scheduler extends Thread {
|
|||||||
|
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
try {
|
try {
|
||||||
|
if (pause){
|
||||||
|
wtime=-1;
|
||||||
|
}
|
||||||
|
|
||||||
if (wtime != -1) {
|
if (wtime != -1) {
|
||||||
wait(wtime);
|
wait(wtime);
|
||||||
} else {
|
} else {
|
||||||
|
BIN
src/main/resources/icons/pause.gif
Normal file
BIN
src/main/resources/icons/pause.gif
Normal file
Binary file not shown.
After ![]() (image error) Size: 272 B |
BIN
src/main/resources/icons/run.gif
Normal file
BIN
src/main/resources/icons/run.gif
Normal file
Binary file not shown.
After ![]() (image error) Size: 247 B |
Loading…
Reference in New Issue
Block a user