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.