package jminhep.gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.ui.RectangleInsets;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.DefaultFontMapper;
import com.lowagie.text.pdf.FontMapper;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfTemplate;
import com.lowagie.text.pdf.PdfWriter;
import java.io.*;
import java.text.*;
import jminhep.utils.*;
import jminhep.clcontrol.*;
import jminhep.cluster.*;
import javax.swing.filechooser.FileFilter;
import java.util.*;
/**
*
* Title: Main frame
*
*
*
* Description: Create main frame
*
*
*
* Copyright: Copyright (c) 2006. JMinHEP
*
* @author S.Chekanov
* @version 1.0
*/
public class MainFrame extends JFrame implements Constants {
public static final long serialVersionUID = 1;
private JPanel contentPane;
private BorderLayout borderLayout1;
private JMenuBar jMenuBar1;
private JMenu jMenuFile;
private JMenuItem jMenuFileExit;
private JMenuItem jMenuFileOpen;
private JMenuItem jMenuFileClose;
private JMenu jMenuHelp;
private JMenuItem jMenuHelpAbout, jMenuExport;
private JToolBar jToolBar;
private JButton jButton1;
private JButton jButton2;
private JButton jButton3;
private CSelector m_CSelector;
private static int Mode_old = 1;
private JToolBar jToolBar1;
private JPanel jPanel2;
// public jminhep.kmeans.JPanKmeans jKmeans; // cluster pad;
private ClControl m_ClControl;
private JPanel infoPanel;
private TableSummary jSummary;
private JPanel jSumPanel;
public static String file_input = "";
public static String file_open = "";
public static String file_save = "";
// public static weka.gui.ViewerDialog viewtable;
public static File afile;
public static Vector textX;
public static Vector textY;
protected Thread m_IOThread;
private JComboBox selX;
private JComboBox selY;
private JComboBox selStyle;
private ThreadShow SThX=null;
private ThreadShow SThY=null;
// public JLabel LstatusBar;
public MainFrame(String input) {
try {
file_input = input;
// setDefaultCloseOperation(EXIT_ON_CLOSE);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
public MainFrame(DataHolder d) {
try {
SetEnv.DATA=d;
// setDefaultCloseOperation(EXIT_ON_CLOSE);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
SetEnv.init();
// enviromental variables
ResourceLoader.init("jminhep/resources/");
m_CSelector = new CSelector();
infoPanel = new JPanel();
jMenuFileExit = new JMenuItem();
jMenuExport = new JMenuItem("Export to PDF...", 112);
jMenuFileOpen = new JMenuItem();
jMenuFileClose = new JMenuItem();
jMenuHelp = new JMenu();
jMenuHelpAbout = new JMenuItem();
jToolBar = new JToolBar(null, JToolBar.HORIZONTAL);
jButton1 = new JButton();
jButton2 = new JButton();
jButton3 = new JButton();
jSummary = new TableSummary();
jSumPanel = new JPanel();
jSumPanel.setLayout(new BorderLayout());
jSumPanel.setPreferredSize(new Dimension(SetEnv.SizeB, 300));
jSumPanel.add(jSummary, java.awt.BorderLayout.CENTER);
borderLayout1 = new BorderLayout();
jMenuBar1 = new JMenuBar();
jMenuFile = new JMenu();
jToolBar1 = new JToolBar(null, JToolBar.VERTICAL);
jToolBar1.setLayout(new BorderLayout());
// jPanel1 = new JPanel();
jPanel2 = new JPanel();
textX = new Vector();
textY = new Vector();
textX.addElement("not set");
textY.addElement("not set");
//
jPanel2.add(m_CSelector);
String[] plots = { "Points", "Density" };
selStyle = new JComboBox(plots);
// selX.setBounds(20,10,100,25);
selStyle.setSelectedIndex(0);
selStyle.setPreferredSize(new java.awt.Dimension(200, 50));
selStyle.setBorder(new TitledBorder(null, "Style",
TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0,
12)));
selX = new JComboBox(textX);
// selX.setBounds(20,10,100,25);
selX.setSelectedIndex(0);
selX.setPreferredSize(new java.awt.Dimension(200, 50));
selX.setBorder(new TitledBorder(null, "X:",
TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0,
12)));
jPanel2.add(selX);
selY = new JComboBox(textY);
selY.setBorder(new TitledBorder(null, "Y:",
TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0,
12)));
// selY.setBounds(20,10,100,25);
selY.setSelectedIndex(0);
selY.setPreferredSize(new java.awt.Dimension(200, 50));
jPanel2.add(selY);
selX.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
JComboBox cb = (JComboBox) evt.getSource();
int nn = cb.getSelectedIndex();
if (nn > -1 && SetEnv.JboxX != nn) {
SetEnv.JboxX = nn;
SThX = new ThreadShow(SetEnv.Style );
if (!SThX.Alive()) SThX.Start();
// redraw
// if (SetEnv.Mode.equals("kmeans") ) jKmeans.Redraw();
}
}
});
selY.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
JComboBox cb = (JComboBox) evt.getSource();
int nn = cb.getSelectedIndex();
if (nn > -1 && SetEnv.JboxY != nn) {
SetEnv.JboxY = nn;
SThY = new ThreadShow(SetEnv.Style );
if (!SThY.Alive()) SThY.Start();
}
}
});
MyItemListenerStyle actionListenerStyle = new MyItemListenerStyle();
selStyle.addItemListener(actionListenerStyle);
jPanel2.add(selStyle);
jPanel2.add(jSumPanel);
m_ClControl = new ClControl();
/*
* jKmeans = new jminhep.kmeans.JPanKmeans(); jHcl = new
* jminhep.hcluster.JPanKmeans(); jCmeans = new
* jminhep.cmeans.JPanKmeans();
*/
contentPane = (JPanel) getContentPane();
contentPane.setLayout(borderLayout1);
setSize(new Dimension(SetEnv.SizeX, SetEnv.SizeY));
setTitle("jMinHEP");
infoPanel.setLayout(new BorderLayout());
infoPanel.setBorder(new javax.swing.border.EtchedBorder());
// LstatusBar = new JLabel("jMinHEP is active");
infoPanel.add(SetEnv.statusbar, BorderLayout.WEST);
MemoryMonitor memMon = new MemoryMonitor();
memMon.setPreferredSize(new java.awt.Dimension(65, 24));
memMon.setMinimumSize(new java.awt.Dimension(30, 10));
infoPanel.add(memMon, BorderLayout.EAST);
jMenuFile.setText("File");
jMenuFileExit.setText("Exit");
jMenuFileOpen.setText("Open");
jMenuFileClose.setText("Close");
jMenuFileExit
.addActionListener(new MainFrame_jMenuFileExit_ActionAdapter(
this));
jMenuFileOpen
.addActionListener(new MainFrame_jMenuFileOpen_ActionAdapter(
this));
jMenuFileClose
.addActionListener(new MainFrame_jMenuFileClose_ActionAdapter(
this));
jMenuExport
.addActionListener(new MainFrame_jMenuExport_ActionAdapter (this));
jMenuHelp.setText("Help");
jMenuHelpAbout.setText("About");
jMenuHelpAbout
.addActionListener(new MainFrame_jMenuHelpAbout_ActionAdapter(
this));
jMenuBar1.add(jMenuFile);
jMenuFile.add(jMenuFileOpen);
jMenuFile.add(jMenuFileClose);
jMenuFile.add(jMenuExport);
jMenuFile.addSeparator();
jMenuFile.add(jMenuFileExit);
jMenuBar1.add(jMenuHelp);
jMenuHelp.add(jMenuHelpAbout);
setJMenuBar(jMenuBar1);
jButton1.setIcon(OpeN);
jButton1.setToolTipText("Open File");
jToolBar.add(jButton1);
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
OpenFile();
}
});
jButton2.setIcon(ClosE);
jButton2.setToolTipText("Close File");
jToolBar.add(jButton2);
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
closeFile();
}
});
jButton3.setIcon(HelP);
jButton3.setToolTipText("Help");
jToolBar.add(jButton3);
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
openHelp();
}
});
contentPane.add(infoPanel, BorderLayout.SOUTH);
contentPane.add(jToolBar, BorderLayout.NORTH);
contentPane.add(jToolBar1, BorderLayout.EAST);
// Analyse panel
jToolBar1.add(m_CSelector, BorderLayout.NORTH);
jToolBar1.add(jPanel2, BorderLayout.CENTER);
jPanel2.setPreferredSize(new Dimension(SetEnv.SizeB, SetEnv.SizeY));
m_ClControl.setPreferredSize(new Dimension(SetEnv.SizeB, SetEnv.SizeY));
// lisener tree
m_CSelector.m_tree
.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
// Get all nodes whose selection status has changed
TreePath path = e.getPath();
Object[] nodes = path.getPath();
String oid = "";
for (int k = 0; k < nodes.length; k++) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) nodes[k];
OidNode nd = (OidNode) node.getUserObject();
oid += nd.getId();
}
SetEnv.Mode = Integer.parseInt(oid);
SetEnv.statusbar.setText("Partition mode "
+ SetEnv.Mode + " initiated");
// set analysers : only if there is a change!
if (SetEnv.Mode == 1) {
if (Mode_old != 1) {
jToolBar1.remove(m_ClControl);
jToolBar1.add(jPanel2, BorderLayout.CENTER);
Mode_old = SetEnv.Mode;
jToolBar1.updateUI();
}
} else {
if (Mode_old == 1) {
jToolBar1.remove(jPanel2);
jToolBar1.add(m_ClControl, BorderLayout.CENTER);
Mode_old = SetEnv.Mode;
jToolBar1.updateUI();
}
}
// System.out.println("Selected="+SetEnv.Mode);
// m_display.setText(oid);
}
});
contentPane.add(SetEnv.PLOT, java.awt.BorderLayout.CENTER);
// read arff file from prompt
if (file_input.length() > 1) {
// read arff file
LoadFile(file_input);
} else if (SetEnv.DATA != null) {
LoadFile();
}
}
/**
* File | Exit action performed.
*
* @param actionEvent
* ActionEvent
*/
void jMenuFileExit_actionPerformed(ActionEvent actionEvent) {
JOptionPane dialog = new JOptionPane();
int ask = JOptionPane.showConfirmDialog(dialog,
"Exit JMinHEP?", "Question",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null);
if (ask == JOptionPane.YES_OPTION) {
// System.exit(0);
setVisible(false);
dispose();
}
}
/**
* Open action performed.
*
* @param actionEvent
* ActionEvent
*/
void jMenuFileOpen_actionPerformed(ActionEvent actionEvent) {
OpenFile();
}
/**
* Open action performed.
*
* @param actionEvent
* ActionEvent
*/
void jMenuFileClose_actionPerformed(ActionEvent actionEvent) {
closeFile();
}
/**
* Export to PDF
*
* @param actionEvent
* ActionEvent
*/
void jMenuExport_actionPerformed(ActionEvent actionEvent) {
export();
}
void export() {
ChartPanel chartpanel = SetEnv.PLOT.getChartPanel();
JFreeChart jfreechart = SetEnv.PLOT.getChart();
int i = chartpanel.getWidth();
int j = chartpanel.getHeight();
if(jfreechart != null)
{
JFileChooser jfilechooser = new JFileChooser();
jfilechooser.setName("untitled.pdf");
jfilechooser.setFileFilter(new FileFilter() {
public boolean accept(File file)
{
return file.isDirectory() || file.getName().endsWith(".pdf");
}
public String getDescription()
{
return "Portable Document Format (PDF)";
}
});
int k = jfilechooser.showSaveDialog(this);
if(k == 0)
try
{
JFreeChart jfreechart1 = (JFreeChart)jfreechart.clone();
PDFExportTask pdfexporttask = new PDFExportTask(jfreechart1, i, j, jfilechooser.getSelectedFile());
Thread thread = new Thread(pdfexporttask);
thread.start();
}
catch(CloneNotSupportedException clonenotsupportedexception)
{
clonenotsupportedexception.printStackTrace();
}
} else
{
String s = "Unable to export the selected item. There is ";
s = s + "either no chart selected,\nor else the chart is not ";
s = s + "at the expected location in the component hierarchy\n";
s = s + "(future versions of the demo may include code to ";
s = s + "handle these special cases).";
JOptionPane.showMessageDialog(this, s, "PDF Export", 1);
}
}
void closeFile() {
JOptionPane dialog = new JOptionPane();
int ask = JOptionPane.showConfirmDialog(dialog,
"Close current ARFF file?", "Question",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null);
if (ask == JOptionPane.YES_OPTION) {
SetEnv.PLOT.clearPlot();
SetEnv.DATA = null;
SetEnv.Dim = 0;
SetEnv.NRow = 0;
}
}
void openHelp() {
new AboutDialog(this);
}
// set options and plot
void SetOptions(int iX, int iY) {
// set instances
selX.removeAllItems();
selY.removeAllItems();
SetEnv.JboxX = iX;
SetEnv.JboxY = iY;
for (int i = 0; i < SetEnv.Dim; i++) {
String a = SetEnv.DATA.getName(i);
selX.addItem(a);
selY.addItem(a);
// System.out.println( a );
}
// draw ponts
if (SetEnv.Dim > 1) {
selX.setSelectedIndex(iX);
selY.setSelectedIndex(iY);
SetEnv.JboxX = iX;
SetEnv.JboxY = iY;
if (SetEnv.Style == 0) {
ThreadShow STh1 = new ThreadShow(SetEnv.Style);
if (!STh1.Alive()) STh1.Start();
}
}
}
// set summary table
void SetTableSummary() {
if (jSummary.model.getRowCount() > 0)
jSummary.model.setRowCount(0);
// Input array, values to be read in successively, float
int n = SetEnv.NRow;
int m = SetEnv.Dim;
double[][] indat = new double[n][m];
for (int i = 0; i < n; i++) {
DataPoint dp = SetEnv.DATA.getRow(i);
for (int i2 = 0; i2 < m; i2++)
indat[i][i2] = dp.getAttribute(i2);
}
double[][] sum = VEC.GetSummaryData(n, m, indat);
NumberFormat formatter = new DecimalFormat("0.00E00");
for (int i = 0; i < m; i++) {
String s0 = SetEnv.DATA.getName(i);
String s1 = formatter.format(sum[i][0]);
String s2 = formatter.format(sum[i][1]);
jSummary.model.addRow(new Object[] { new String(s0),
new String(s1 + "/" + s2) });
}
}
// show status
void ShowStatus(String s) {
SetEnv.statusbar.setText(s);
}
void OpenFile() {
// Create a file chooser
JFileChooser fc = new JFileChooser();
fc.addChoosableFileFilter(new FilterARFF());
int returnVal = fc.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
afile = fc.getSelectedFile();
file_open = afile.getAbsolutePath().trim();
// read arff file
LoadFile(file_open);
};
} // end open file
/**
* Help | About action performed.
*
* @param actionEvent
* ActionEvent
*/
void jMenuHelpAbout_actionPerformed(ActionEvent actionEvent) {
openHelp();
}
/**
* Load a file
* @param sfile
*/
public void LoadFile(String sfile) {
SetEnv.Load(sfile); // read input
SetEnv.JboxX = 0;
SetEnv.JboxY = 1;
SetOptions(SetEnv.JboxX, SetEnv.JboxY);
ShowStatus("File " + sfile + " loaded");
}
/**
* Load external data
**/
public void LoadFile() {
SetEnv.Load();
SetEnv.JboxX = 0;
SetEnv.JboxY = 1;
SetOptions(SetEnv.JboxX, SetEnv.JboxY);
ShowStatus("Data are loaded");
}
/**
* Load file in thread
* @author S.Chekanov
* Aug 21, 2006
*
*/
class LoadCombo extends Thread {
private String name;
public LoadCombo(String str) {
super(str);
name=str;
}
public void run() {
SetEnv.Load(name); // read input
SetEnv.JboxX = 0;
SetEnv.JboxY = 1;
SetOptions(SetEnv.JboxX, SetEnv.JboxY);
ShowStatus("File " + name + " loaded");
}
}
public static void saveChartAsPDF(File file, JFreeChart jfreechart, int i, int j, FontMapper fontmapper)
throws IOException
{
BufferedOutputStream bufferedoutputstream = new BufferedOutputStream(new FileOutputStream(file));
writeChartAsPDF(bufferedoutputstream, jfreechart, i, j, fontmapper);
bufferedoutputstream.close();
}
public static void writeChartAsPDF(OutputStream outputstream, JFreeChart jfreechart, int i, int j, FontMapper fontmapper)
throws IOException
{
Rectangle rectangle = new Rectangle(i, j);
Document document = new Document(rectangle, 50F, 50F, 50F, 50F);
try
{
PdfWriter pdfwriter = PdfWriter.getInstance(document, outputstream);
document.addAuthor("S.Chekanov");
document.addSubject("jMinHEP");
document.open();
PdfContentByte pdfcontentbyte = pdfwriter.getDirectContent();
PdfTemplate pdftemplate = pdfcontentbyte.createTemplate(i, j);
Graphics2D graphics2d = pdftemplate.createGraphics(i, j, fontmapper);
java.awt.geom.Rectangle2D.Double double1 = new java.awt.geom.Rectangle2D.Double(0.0D, 0.0D, i, j);
jfreechart.draw(graphics2d, double1);
graphics2d.dispose();
pdfcontentbyte.addTemplate(pdftemplate, 0.0F, 0.0F);
}
catch(DocumentException documentexception)
{
System.err.println(documentexception.getMessage());
}
document.close();
}
/**
* File selector
* @author S.Chekanov
* Aug 21, 2006
*
*/
class FilterARFF extends javax.swing.filechooser.FileFilter {
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
}
else if (f.getName().endsWith(".arff") ||
f.getName().endsWith(".ARFF")) {
return true;
}
return false;
}
public String getDescription() {
return "*.arff"; }
}
// exit
class MainFrame_jMenuFileExit_ActionAdapter implements ActionListener {
MainFrame adaptee;
MainFrame_jMenuFileExit_ActionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent actionEvent) {
adaptee.jMenuFileExit_actionPerformed(actionEvent);
}
}
// open
class MainFrame_jMenuFileOpen_ActionAdapter implements ActionListener {
MainFrame adaptee;
MainFrame_jMenuFileOpen_ActionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent actionEvent) {
adaptee.jMenuFileOpen_actionPerformed(actionEvent);
}
}
// close
class MainFrame_jMenuFileClose_ActionAdapter implements ActionListener {
MainFrame adaptee;
MainFrame_jMenuFileClose_ActionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent actionEvent) {
adaptee.jMenuFileClose_actionPerformed(actionEvent);
}
}
//close
class MainFrame_jMenuExport_ActionAdapter implements ActionListener {
MainFrame adaptee;
MainFrame_jMenuExport_ActionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent actionEvent) {
adaptee.jMenuExport_actionPerformed(actionEvent);
}
}
class MainFrame_jMenuHelpAbout_ActionAdapter implements ActionListener {
MainFrame adaptee;
MainFrame_jMenuHelpAbout_ActionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent actionEvent) {
adaptee.jMenuHelpAbout_actionPerformed(actionEvent);
}
}
class MyItemListenerStyle implements ItemListener {
// This method is called only if a new item has been selected.
public void itemStateChanged(ItemEvent evt) {
JComboBox cb = (JComboBox) evt.getSource();
// Object item = evt.getItem();
if (evt.getStateChange() == ItemEvent.SELECTED) {
int nn = cb.getSelectedIndex();
if (nn == 0) SetEnv.Style = 0;
if (nn == 1) SetEnv.Style = 1;
ThreadShow STh3 = new ThreadShow(SetEnv.Style );
if (!STh3.Alive()) STh3.Start();
} else if (evt.getStateChange() == ItemEvent.DESELECTED) {
// Item is no longer selected
}
}
}
static class PDFExportTask
implements Runnable
{
public void run()
{
try
{
saveChartAsPDF(file, chart, width, height, new DefaultFontMapper());
}
catch(IOException ioexception)
{
ioexception.printStackTrace();
}
}
JFreeChart chart;
int width;
int height;
File file;
public PDFExportTask(JFreeChart jfreechart, int i, int j, File file1)
{
chart = jfreechart;
file = file1;
width = i;
height = j;
jfreechart.setBorderVisible(true);
jfreechart.setPadding(new RectangleInsets(2D, 2D, 2D, 2D));
}
}
} // end main class
Ads help maintain this website.