📄 analyzerpanel.java
字号:
/*************************************************************************
This program is copyrighted. Please refer to COPYRIGHT.txt for the
copyright notice.
This file is part of JavaNNS.
JavaNNS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
JavaNNS is distributed in the hope that it will be useful,
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JavaNNS; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*************************************************************************/
package javanns;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.awt.print.*;
import wsi.ra.chart2d.*;
/**
* AnalyzerPanel is a multifunctional graph panel, which shows certain
* properties of the network or the pattern set
*/
class AnalyzerPanel extends JPanel implements ActionListener,
Printable,
ChangeListener{
/**
* the central body of the program
*/
Snns snns;
/**
* analyzer's frame
*/
JInternalFrame frame;
/**
* counting the steps
*/
int time = 0;
/**
* the line index ( several lines in different colours can be shown )
*/
private int lIndex = 0;
volatile boolean is_testing = false;
ThreadChief tc;
/**
* components of the panels in the frame
*/
// Components for main panel:
DArea dArea;
DPointSet[] points;
Icon iGridOn, iGridOff;
FlatButton bGrid, bClear, bDecreaseX, bIncreaseX, bDecreaseY, bIncreaseY,
bLeft, bUp, bRight, bDown, bNewLine, bAutoFocus;
ScaledBorder sbArea;
// Components for setup panel:
JComboBox jcbXValues, jcbYValues, jcbErrors;
JPanel pXDetails, pYDetails;
JTextField tfXUnitNo, tfYUnitNo;
JRadioButton rbXAct, rbYAct;
JCheckBox cbAVE, cbChangeColors;
// Components for test panel:
JTextField tfSteps, tfTrainingSteps;
JButton bTest;
JCheckBox cbChangePattern, cbTrainNet;
JLabel lTrainingSteps;
//Components for axis panel:
JTextField tfXScale, tfYScale;
JCheckBox cbXScaleDefault, cbYScaleDefault;
JButton bApplyPatterns;
/**
* constructor of the analyzer
* the frame is just created not added to the container
*
* @param snns the central part of JavaNNS
*/
public AnalyzerPanel( Snns s ) {
snns = s;
JPanel pMain = getMain();
JTabbedPane pane = new JTabbedPane();
pane.addTab( "Setup", getSetup() );
pane.addTab( "Test", getTest() );
pane.addTab( "Scales", getScale() );
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = snns.panel_insets;
gbc.weightx = gbc.weighty = .5;
gbc.gridx = gbc.gridy = 0;
gbc.fill = gbc.BOTH;
setLayout( gbl );
gbl.setConstraints( pMain, gbc );
add( pMain );
gbc.gridy = 1;
gbc.weighty = 0;
gbl.setConstraints( pane, gbc );
add( pane );
frame = new JInternalFrame("Analyzer", true, true, true, true );
frame.setContentPane( this );
frame.pack();
tc = new ThreadChief(){
public void stopped(Object o){
if( o instanceof Exception )
snns.showException((Exception)o, this);
is_testing = false;
bTest.setText("Test");
releaseLogPanel();
}
};
}
public void addPoint(double x, double y){
points[lIndex].addDPoint(x,y);
}
public void jump(){
points[lIndex].jump();
if( cbChangeColors.isSelected() ){
lIndex++;
lIndex %= points.length;
}
}
/*------------------------- interfaces ---------------------------------------*/
public void actionPerformed( ActionEvent evt ){
//System.out.println("Analyzer.actionPerf");
Object src = evt.getSource();
DRectangle rect = dArea.getDRectangle();
if( src == bGrid ){
if( dArea.isGridVisible() ){
dArea.setGridVisible( false );
bGrid.setIcon( iGridOn );
bGrid.setToolTipText("Turn grid on");
}
else{
dArea.setGridVisible( true );
bGrid.setIcon( iGridOff );
bGrid.setToolTipText("Turn grid off");
}
}
else if( src == bClear ) {
for( int i = 0; i<points.length; i++ ) points[i].removeAllPoints();
time = lIndex = 0;
}
else if( src == jcbXValues ){
int sel = jcbXValues.getSelectedIndex();
switch( sel ){
case 0 : setXUnitPanel(); break;
case 1 : setXTimePanel(); break;
case 2 : setXPatNoPanel(); break;
}
pXDetails.validate();
}
else if( src == jcbYValues ){
int sel = jcbYValues.getSelectedIndex();
if( sel == 0 ) setYUnitPanel();
else setYErrorPanel();
pYDetails.validate();
}
else if( src == jcbErrors ) setYErrorPanel();
else if( src == bTest ){
if( is_testing ) tc.stop = true;
else{
lockLogPanel();
bTest.setText("Stop");
tc.stop = false;
is_testing = true;
new Analyzer(this);
}
}
else if( src == bDecreaseX ){
rect.x += rect.width / 4;
rect.width /= 2;
dArea.setVisibleRectangle( rect );
}
else if( src == bIncreaseX ){
rect.width *= 2;
rect.x -= rect.width / 4;
dArea.setVisibleRectangle( rect );
}
else if( src == bDecreaseY ){
rect.y += rect.height / 4;
rect.height /= 2;
dArea.setVisibleRectangle( rect );
}
else if( src == bIncreaseY ){
rect.height *= 2;
rect.y -= rect.height / 4;
dArea.setVisibleRectangle( rect );
}
else if( src == bLeft ){
rect.x -= rect.width / 4 ;
dArea.setVisibleRectangle( rect );
}
else if( src == bUp ){
rect.y += rect.height / 4 ;
dArea.setVisibleRectangle( rect );
}
else if( src == bRight ){
rect.x += rect.width / 4 ;
dArea.setVisibleRectangle( rect );
}
else if( src == bDown ){
rect.y -= rect.height / 4 ;
dArea.setVisibleRectangle( rect );
}
else if( src == cbTrainNet ){
boolean selected = cbTrainNet.isSelected();
tfTrainingSteps.setEnabled( selected );
lTrainingSteps.setEnabled( selected );
}
else if( src == bNewLine ) newLine();
else if( src == bAutoFocus ) dArea.setAutoFocus( true );
else if( src == bApplyPatterns ){
String pat = getXFormPattern();
java.text.DecimalFormat form = new java.text.DecimalFormat();
if( pat != null ) form.applyPattern(pat);
sbArea.format_x = form;
pat = getYFormPattern();
form = new java.text.DecimalFormat();
if( pat != null ) form.applyPattern(pat);
sbArea.format_y = form;
dArea.repaint();
}
}
public void stateChanged(ChangeEvent e){
Object src = e.getSource();
if( src == cbXScaleDefault )
tfXScale.setEnabled(!cbXScaleDefault.isSelected());
else if( src == cbYScaleDefault )
tfYScale.setEnabled(!cbYScaleDefault.isSelected());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -