📄 clntcomm.java
字号:
public void valueChanged(ListSelectionEvent e) { selectionChanged(e); } }); JTableHeader timeListHeader = timeList.getTableHeader(); timeListHeader.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { sortColumn(evt); } }); timeList.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { editWindow(evt); } }); scrollPane.setViewportView(timeList); add(scrollPane, java.awt.BorderLayout.CENTER); menuPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT)); startButton.setMnemonic(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK).getKeyCode()); startButton.setText("Start"); startButton.setBorder(null); startButton.setBorderPainted(false); startButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { toggleTimer(evt); } }); menuPanel.add(startButton); add(menuPanel, java.awt.BorderLayout.NORTH); }//GEN-END:initComponents private void showHelp(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showHelp new HelpDisplay().show(); }//GEN-LAST:event_showHelp private void exportToTable(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportToTable JDBCControlPanel panel = new JDBCControlPanel(); if(panel.exportTimeRecordSet(times)) zeroProject(evt); }//GEN-LAST:event_exportToTable private void editJDBC(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editJDBC JDBCControlPanel panel = new JDBCControlPanel(); panel.initGUI(); panel.show(); }//GEN-LAST:event_editJDBC private void sortColumn(java.awt.event.MouseEvent evt) { TableColumnModel columnModel = timeList.getColumnModel(); int viewColumn = columnModel.getColumnIndexAtX(evt.getX()); int column = timeList.convertColumnIndexToModel(viewColumn); times.sort(column); timeList.setModel(times.toTableModel()); } private void editWindow(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_editWindow if(evt.getModifiers() == java.awt.event.MouseEvent.BUTTON1_MASK) { if(evt.getClickCount() == 2) editWindow(timeList.getSelectedRow()); } if(evt.getModifiers() == java.awt.event.MouseEvent.BUTTON3_MASK) { selectedIndex = timeList.rowAtPoint(new java.awt.Point(evt.getX(), evt.getY())); timeList.setRowSelectionInterval(selectedIndex, selectedIndex); editMenu.show(timeList, evt.getX(), evt.getY()); } }//GEN-LAST:event_editWindow private void toggleTimer(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_toggleTimer if(timer.clockRunning){ timer.clockRunning = false; startButton.setToolTipText("Start Timer"); startButton.setText("Start"); } else { setTimer(); timer.clockRunning = true; startButton.setToolTipText("Pause Timer"); startButton.setText("Pause"); } }//GEN-LAST:event_toggleTimer private void zeroProject(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zeroProject Object[] options = {"OK", "Cancel"}; int dialog = JOptionPane.showOptionDialog(frame, "All projects will be marked as having \n no elapsed time. Continue?", "Zero-Out All Projects", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[1]); if(dialog == 0){ int index = timeList.getSelectedRow(); times.resetTime(); timer.startTime = System.currentTimeMillis()/1000; timeList.setModel(times.toTableModel()); timeList.repaint(); refreshTotalTime(); } }//GEN-LAST:event_zeroProject private void editProject(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editProject editWindow(timeList.getSelectedRow()); }//GEN-LAST:event_editProject private void deleteProject(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteProject int len = 0; int selectedIndex = timeList.getSelectedRow(); if(selectedIndex > -1){ //Warn the user Object[] options = {"OK", "Cancel"}; int dialog = JOptionPane.showOptionDialog(frame, "Project will be deleted. Continue?", "Delete Project", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[1]); if(dialog == 0){ times.delete(selectedIndex); timeList.setModel(times.toTableModel()); } } }//GEN-LAST:event_deleteProject private void newProject(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newProject editWindow(times.size()); }//GEN-LAST:event_newProject private void toggleTotals (java.awt.event.MouseEvent evt) {//GEN-FIRST:event_toggleTotals showTotal = showTotal == false; if(showTotal) totalText.setText("Total:"); else totalText.setText("Billable:"); refreshTotalTime(); }//GEN-LAST:event_toggleTotals private void selectionChanged(ListSelectionEvent e) { setTimer(); } private void setTimer() { if(timeList.getSelectedRow() >= 0){ long currTime = System.currentTimeMillis()/1000; timer.startTime = currTime - times.getSeconds(timeList.getSelectedRow()); } } /** * Create edit project window. * @parm Index into the project list */ public void editWindow(int i){ index = i; selectedIndex = timeList.getSelectedRow(); TimeRecord record; boolean newRecord = false; try { record = times.elementAt(index); newRecord = false; } catch (ArrayIndexOutOfBoundsException e) { record = new TimeRecord(); newRecord = true; } EditDialog edit = new EditDialog((JFrame)this.getTopLevelAncestor(), record, newRecord); edit.pack(); edit.setLocationRelativeTo(this); edit.setVisible(true); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JMenuBar menuBar; private javax.swing.JMenu projectMenu; private javax.swing.JMenuItem addMenuItem; private javax.swing.JMenuItem deleteMenuItem; private javax.swing.JMenuItem editMenuItem; private javax.swing.JMenuItem zeroMenuItem; private javax.swing.JMenu toolMenu; private javax.swing.JMenuItem dbexportMenuItem; private javax.swing.JMenuItem jdbcMenuItem; private javax.swing.JMenuItem helpMenuItem; private javax.swing.JPopupMenu editMenu; private javax.swing.JMenuItem editPopupItem; private javax.swing.JMenuItem deletePopupItem; private javax.swing.JPanel totalPanel; private javax.swing.JLabel totalText; private javax.swing.JLabel totalTime; private javax.swing.JScrollPane scrollPane; private javax.swing.JTable timeList; private javax.swing.JPanel menuPanel; private javax.swing.JButton startButton; // End of variables declaration//GEN-END:variables /** * TimerThread updates system variables upon each tick of the clock. */ private class TimerThread extends Thread{ public boolean runThread, clockRunning; public int updateSeconds; public long startTime; /** * Create a new timer. * @parm How often to update (in milliseconds) * @parm The Consultant Manager screen to update */ public TimerThread(int update) { updateSeconds = update; clockRunning = false; runThread = true; startTime = 0; } public void run(){ long currTime; int index; long currSeconds; while(runThread){ try { sleep(updateSeconds); if(clockRunning){ //Get the current seconds past midnight. currTime = System.currentTimeMillis()/1000; if((index = timeList.getSelectedRow()) >= 0){ currSeconds = currTime - startTime; times.setSeconds(index, currSeconds); //Only repaint if the minutes have changed. if (currSeconds % 60 == 0){ refreshTotalTime(); timeList.setValueAt(times.getTime(index), index, 1); timeList.repaint(); savePrefs(); } } } } catch (InterruptedException e) { System.err.println("Sleep failed."); } } } } private class EditDialog extends JDialog { private JOptionPane optionPane; EditDialog(JFrame frame, TimeRecord timerec, boolean isNewRecord) { super(frame, true); setTitle("Edit Project"); java.awt.GridBagConstraints first = new java.awt.GridBagConstraints();; first.fill = java.awt.GridBagConstraints.HORIZONTAL; java.awt.GridBagConstraints last = new java.awt.GridBagConstraints(); last.gridwidth = java.awt.GridBagConstraints.REMAINDER; java.awt.GridBagConstraints bottom = new java.awt.GridBagConstraints(); bottom.gridwidth = 2; final TimeRecord record = timerec; final boolean newRecord = isNewRecord; final JTextField projField = new JTextField(record.projectName); projField.setColumns(10); final JTextField aliasField = new JTextField(record.alias); aliasField.setColumns(10); final JTextField timeField = new JTextField(record.toString()); timeField.setColumns(10); final JCheckBox billable = new JCheckBox("Billable Project", record.billable); JPanel editPanel = new JPanel(); editPanel.setLayout(new java.awt.GridBagLayout()); editPanel.add(new JLabel("Project: "), first); editPanel.add(projField, last); editPanel.add(new JLabel("Alias: "), first); editPanel.add(aliasField, last); editPanel.add(new JLabel("Time: "), first); editPanel.add(timeField, last); editPanel.add(billable, bottom); optionPane = new JOptionPane(editPanel, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION); setContentPane(optionPane); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent we) { optionPane.setValue(new Integer(JOptionPane.CLOSED_OPTION)); } }); optionPane.addPropertyChangeListener(new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent e) { String prop = e.getPropertyName(); if (isVisible() && (e.getSource() == optionPane) && (prop.equals(JOptionPane.VALUE_PROPERTY) || prop.equals(JOptionPane.INPUT_VALUE_PROPERTY))) { String value = optionPane.getValue().toString(); if (value == JOptionPane.UNINITIALIZED_VALUE) return; optionPane.setValue(JOptionPane.UNINITIALIZED_VALUE); if (value.equals("0")) { long newTime = System.currentTimeMillis()/1000; record.projectName = projField.getText(); record.setSeconds(timeField.getText()); if(aliasField.getText().length() > 0) record.alias = aliasField.getText(); else record.alias = null; if (index == selectedIndex) timer.startTime = newTime-record.seconds; record.billable = billable.isSelected(); if(newRecord) times.add(record); timeList.setModel(times.toTableModel()); timeList.repaint(); if(selectedIndex == -1) //Nothing selected timeList.setRowSelectionInterval(index, index); else timeList.setRowSelectionInterval(selectedIndex, selectedIndex); refreshTotalTime(); setVisible(false); } else { // user closed dialog or clicked cancel setVisible(false); } } } }); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -