📄 main.java
字号:
package net.sujee.javatimer;import net.sujee.javatimer.Task;import net.sujee.util.LogWriter;import net.sujee.util.ConfigFileParser;import net.sujee.javatimer.TimeSlider;import net.sujee.javatimer.FileExport;import net.sujee.util.GenUtil;import java.util.Vector;import javax.swing.*;import javax.swing.table.*;import javax.swing.event.*;import java.awt.event.*;import java.io.IOException;import java.io.File;import java.util.Random;import java.util.Date;import java.awt.*;/** * Description of the Class * *@author sujee *@created October 21, 2000 */public class Main extends JFrame implements ActionListener, ListSelectionListener, TimerCallback{ TaskMgr mgr; JTable table; TaskTableModel mTableModel; GetUserInput userInput; JFileChooser fileChooser; FileExport fileExport; File mCurrentFile; Timer mTimer; JComboBox mTraceCombo; ConfigFileParser configFile; JButton mButtonNewFile, mButtonSaveFile, mButtonOpenFile, mButtonNewTask, mButtonDelTask, mButtonEditTask, mButtonStartTask, mButtonStopTask, mButtonChart, mButtonAbout, mButtonExit; // ACtionListener boolean notSaved; // ListSelectionListener int[] mRowsSelected; // this holds rows selected int mFirstIndex, mLastIndex; JPanel tracePanel; JDialog aboutDialog; //TimeSlider mTimeSlider; /** * Constructor for the Main object * *@exception Exception Description of Exception */ public Main() throws Exception { super( "Project Timer" ); Global.logWriter = new LogWriter (); Global.DEBUG = GenUtil.readBoolProperty("NET.SUJEE.DEBUG", false); Global.DEBUG = true; // hardcoding configFile = new ConfigFileParser( "projtimer.cfg" ); String lastFileOpened = configFile.getConfigProperty("LastFile", true); if ( (lastFileOpened == null) || (lastFileOpened.equals("")) ) mgr = new TaskMgr(); else // open the last file! { // BUGFIX : 132601 // (http://sourceforge.net/bugs/?func=detailbug&bug_id=132601&group_id=10562) // before we weren't checking if the last Opened file existed. File lastFile = new File (lastFileOpened); if ( lastFile.exists() && lastFile.isFile() && lastFile.canRead() ) { mgr = new TaskMgr (lastFileOpened); mCurrentFile = new File (lastFileOpened); } else mgr = new TaskMgr(); // end BUGFIX : 132601 } mTableModel = new TaskTableModel( this ); mTableModel.refresh( mgr ); // GUI stuff jbInit(); fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode( JFileChooser.FILES_ONLY ); fileChooser.setMultiSelectionEnabled( false ); ExampleFileFilter filter = new ExampleFileFilter( "tmr", "JavaTimer files" ); fileChooser.addChoosableFileFilter( filter ); fileExport = new FileExport (this, configFile.readIntProperty("Window.Export.width", 400), configFile.readIntProperty("Window.Export.height", 300) ); //setup timer mTimer = new Timer(); mTimer.addCallback( this, 60000 ); mTimer.addCallback( mgr, 1000 ); mTimer.addCallback( mTableModel, 1000 ); setButtonState(); } /** * Sets the ButtonState attribute of the Main object */ public void setButtonState() { int totalRowsSelected = 0; if ( mRowsSelected != null ) { totalRowsSelected = mRowsSelected.length; } if ( totalRowsSelected == 0 ) { // nothing //disable all the buttons mButtonDelTask.setEnabled( false ); mButtonEditTask.setEnabled( false ); mButtonStartTask.setEnabled( false ); mButtonStopTask.setEnabled( false ); } else if ( totalRowsSelected == 1 ) { if ( Global.traceLevel >= 3 ) { Global.logWriter.log( "Exactly one task selected : " + mRowsSelected[0] ); } // see if the selected task is active Task t = mgr.getTask( mRowsSelected[0] ); if ( t.isAlive() ) { mButtonDelTask.setEnabled( false ); mButtonEditTask.setEnabled( false ); mButtonStartTask.setEnabled( false ); mButtonStopTask.setEnabled( true ); } else { mButtonDelTask.setEnabled( true ); mButtonEditTask.setEnabled( true ); mButtonStartTask.setEnabled( true ); mButtonStopTask.setEnabled( false ); } } else { // more than one selected if ( Global.traceLevel >= 3 ) { Global.logWriter.log( "#tasks selected : " + totalRowsSelected ); } mButtonDelTask.setEnabled( true ); mButtonEditTask.setEnabled( false ); mButtonStartTask.setEnabled( false ); mButtonStopTask.setEnabled( false ); } if ( mgr.getTaskCount() > 0 ) { mButtonChart.setEnabled( true ); } else { mButtonChart.setEnabled( false ); } } public String getVersion () { /* Changes from 1.0: * - BUGFIX 133076 * Making task edit window modal & centered around parent frame * - BUGFIX 132601 * checking if the 'LastFile' exists before reopening @ startup */ return "1.1"; } /** * Description of the Method * *@param event Description of Parameter */ public void actionPerformed( ActionEvent event ) { //Button Events if ( Global.traceLevel >= 3 ) { Global.logWriter.log( event.toString() ); } Object source = event.getSource(); if ( source == mTraceCombo ) { JComboBox comb = ( JComboBox ) source; // clever trick here, tracel levels are added to // combo in increasing order :-) Global.traceLevel = comb.getSelectedIndex(); Global.logWriter.log( "Trace Level set to : " + Global.traceLevel ); return; } JButton button = ( JButton ) source; if ( button == mButtonExit ) { if ( Global.traceLevel >= 2 ) { Global.logWriter.log( "Exit button pressed" ); } exit(); } else if (button == mButtonAbout) { if (aboutDialog == null) { aboutDialog = new JDialog (this, "About Project Timer", true); aboutDialog.setLocationRelativeTo(this); aboutDialog.setSize (360,180); aboutDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); aboutDialog.getContentPane().add( new JLabel ( "<html> <p> " + " <b> <h1> Project Timer </h1> - <i> v " + getVersion() + "</i> <br>" + "Project Home : <a href=\"http://sourceforge.net/projects/projtimer/\">http://sourceforge.net/projects/projtimer/</a> <br>" + "Author : <i> Sujee Sivasbramaniyam </i> <br>" + "Contact : <i> sujee@netlane.com </i> </b> <p> </html>" )); } aboutDialog.show(); } else if ( button == mButtonDelTask ) { // pop up a confirmation dialog int answer = JOptionPane.showConfirmDialog(this,"Do you want to DELETE this task?", "", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); // delete all the selected tasks // ALERT : removing tasks one by one in for loop won't work. Why? // well, the moment we delete something, the indexes will // change, rendering every following index meaningless! // took me a while to figure that! :-) if ( ( answer == JOptionPane.YES_OPTION) && (mRowsSelected != null ) ) { mgr.deleteTask( mRowsSelected ); // once all done, refresh the model //mTableModel.fireTableRowsDeleted(mFirstIndex,mLastIndex); mTableModel.refresh( mgr ); table.clearSelection(); mRowsSelected = null; mButtonSaveFile.setEnabled( true ); notSaved = true; } } // end : deletebutton else if ( button == mButtonNewTask ) { TaskEditWindow taskEdit = new TaskEditWindow( this, // BUGFIX : 133076 new Task( "Unknown", "Unknown" ) ); if ( taskEdit.showEdit() ) { // show window Task task = taskEdit.getEditedTask(); mgr.createTask( task ); mTableModel.refresh( mgr ); mButtonSaveFile.setEnabled( true ); notSaved = true; } } // end : newTask else if ( button == mButtonEditTask ) { if ( table.getSelectedRowCount() == 1 ) { // only one EDIT at a time int row = table.getSelectedRow(); Task t = mgr.getTask( row ); TaskEditWindow taskEdit = new TaskEditWindow( this, // BUGFIX : 133076 t ); if ( taskEdit.showEdit() ) { mgr.setTask( row, taskEdit.getEditedTask() ); mButtonSaveFile.setEnabled( true ); notSaved = true; mTableModel.fireTableCellUpdated( row, 2 ); } } else { Global.logWriter.log( "Select only one task to edit" ); } } else if ( button == mButtonSaveFile ) { saveToFile(); } else if ( button == mButtonNewFile ) { mTimer.removeCallback( mgr ); mgr = new TaskMgr(); mTimer.addCallback( mgr, 1000 ); mCurrentFile = null; notSaved = true; mButtonSaveFile.setEnabled( true ); mButtonNewTask.setEnabled( true ); mTableModel.refresh( mgr ); } else if ( button == mButtonOpenFile ) { int ret = fileChooser.showOpenDialog( this ); if ( ret == JFileChooser.APPROVE_OPTION ) { try { mTimer.removeCallback( mgr ); mgr = new TaskMgr( fileChooser.getSelectedFile() ); mTimer.addCallback( mgr, 1000 ); mTableModel.refresh( mgr ); mButtonNewTask.setEnabled( true ); table.clearSelection(); mCurrentFile = fileChooser.getSelectedFile(); if ( Global.traceLevel >= 1 ) { Global.logWriter.log( "New file is : " + mCurrentFile ); } } catch ( Exception e ) { Global.logWriter.log( e.toString() ); } } } else if ( button == mButtonStartTask ) { if ( table.getSelectedRowCount() == 1 ) { // only one EDIT at a time int row = table.getSelectedRow(); mTableModel.setValueAt( new Boolean( true ), row, 3 ); mTableModel.fireTableCellUpdated( row, 3 ); } else { Global.logWriter.log( "Select only one task to Start" ); } } else if ( button == mButtonStopTask ) { if ( table.getSelectedRowCount() == 1 ) { // only one EDIT at a time int row = table.getSelectedRow(); mTableModel.setValueAt( new Boolean( false ), row, 3 ); mTableModel.fireTableCellUpdated( row, 3 ); } else { Global.logWriter.log( "Select only one task to Stop" ); } } else if ( button == mButtonChart ) { Vector v; if (mRowsSelected == null) // get all tasks { v = mgr.listTasks(); } else // get only selected tasks { v = new Vector (); for (int i=0; i < mRowsSelected.length; i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -