📄 datagloveconfigpanel.java
字号:
if (currentTracksCB.getItemCount() > 0) { updateForTrack((String) currentTracksCB.getSelectedItem()); } } private void selectColor() { Color newColor = JColorChooser.showDialog(this, ElanLocale.getString("TimeSeriesViewer.Config.TrackColor"), colorButton.getBackground()); colorButton.setBackground(newColor); } /** * Creates a track; gets the data for the row, column and derivative * from the file reader and initializes a continuous rate track. * @param row the sample row * @param col the sample column * @param derLevel derivative * @return the track or null */ private AbstractTSTrack createTrack(int row, int col, int derLevel) { if (reader == null) { return null; } ContinuousRateTSTrack track = new ContinuousRateTSTrack(); try { track.setData(reader.readTrack(row, col, derLevel)); track.setSampleRate(reader.getSampleFrequency()); track.setType(TimeSeriesTrack.VALUES_FLOAT_ARRAY); } catch (IOException ioe) { LOG.warning("Could not read data for track: " + ioe.getMessage()); } return track; } /** * Calculates the range (min - max) from the data in the track. * * @param track the track * * @return the range, min - max value */ private float[] calculateRange(AbstractTSTrack track) { float[] range = new float[] { 0, 100 }; if ((track != null) && track.getData() instanceof float[]) { float[] data = (float[]) track.getData(); float min = Float.MAX_VALUE; float max = Float.MIN_VALUE; for (int i = 0; i < data.length; i++) { if (data[i] < min) { min = data[i]; } if (data[i] > max) { max = data[i]; } } range[0] = min; range[1] = max; } return range; } /** * Performs checks, creats a track(configuration) and adds it to the * source (configuration). Sends a notification to listeners. */ private void doAdd() { String name = trackNameTF.getText(); int row = 0; int col = 0; int derLevel = 0; float min = 0; float max = 100; if (name != null) { name = name.trim(); } if (name.length() == 0) { showWarningMessage(ElanLocale.getString( "TimeSeriesViewer.Config.Message.NoName")); return; } TSTrackConfiguration tst; for (int i = 0; i < tracks.size(); i++) { tst = (TSTrackConfiguration) tracks.get(i); if (name.equals(tst.getTrackName())) { showWarningMessage(ElanLocale.getString( "TimeSeriesViewer.Config.Message.NameExists")); return; } } // create new track TSTrackConfiguration nextTrack = new TSTrackConfiguration(name); if (singleCellRB.isSelected()) { //always true for the time being row = ((Integer) rowSpinner.getValue()).intValue(); col = ((Integer) colSpinner.getValue()).intValue(); SamplePosition spos = new SamplePosition(new int[] { row }, new int[] { col }); nextTrack.setSamplePos(spos); } if (calcRangeRB.isSelected()) { nextTrack.setProperty(TimeSeriesConstants.AUTO_DETECT_RANGE, "true"); } else { Object minObj = minTF.getValue(); Object maxObj = maxTF.getValue(); if (minObj instanceof Double) { min = ((Double) minObj).floatValue(); } else if (minObj instanceof Long) { min = ((Long) minObj).floatValue(); } else if (minObj instanceof Float) { min = ((Float) minObj).floatValue(); } if (maxObj instanceof Double) { max = ((Double) maxObj).floatValue(); } else if (maxObj instanceof Long) { max = ((Long) maxObj).floatValue(); } else if (maxObj instanceof Float) { max = ((Float) maxObj).floatValue(); } nextTrack.setProperty(TimeSeriesConstants.AUTO_DETECT_RANGE, "false"); } if (deriv1RB.isSelected()) { derLevel = 1; } else if (deriv2RB.isSelected()) { derLevel = 2; } else if (deriv3RB.isSelected()) { derLevel = 3; } AbstractTSTrack track = createTrack(row, col, derLevel); if (track != null) { track.setColor(colorButton.getBackground()); track.setDerivativeLevel(derLevel); track.setName(name); if (calcRangeRB.isSelected()) { track.setRange(calculateRange(track)); } else { track.setRange(new float[] { min, max }); } nextTrack.putObject(name, track); } if (trackDescTF.getText() != null) { track.setDescription(trackDescTF.getText().trim()); } if (unitTF.getText() != null) { track.setUnitString(unitTF.getText().trim()); } config.putObject(name, nextTrack); tracks.add(nextTrack); currentTracksCB.addItem(name); model.addRow(nextTrack); notifyListeners(new TimeSeriesChangeEvent(nextTrack, TimeSeriesChangeEvent.ADD, TimeSeriesChangeEvent.TRACK)); updateForTrack(name); } /** * Performs some checks, update the selected track (configuration) and * notifies listeners. */ private void doChange() { if (currentTrack != null) { boolean changed = false; AbstractTSTrack track = (AbstractTSTrack) currentTrack.getObject(currentTrack.getTrackName()); String name = trackNameTF.getText(); if (name != null) { name = name.trim(); } if (name.length() == 0) { showWarningMessage(ElanLocale.getString( "TimeSeriesViewer.Config.Message.NoName")); return; } if (!name.equals(currentTrack.getTrackName())) { currentTrack.setTrackName(name); if (track != null) { track.setName(name); } changed = true; } if (trackDescTF.getText() != null) { String desc = trackDescTF.getText().trim(); if ((track != null) && !desc.equals(track.getDescription())) { track.setDescription(desc); changed = true; } } // skip the sample position, can not be changed if ("true".equals(currentTrack.getProperty( TimeSeriesConstants.AUTO_DETECT_RANGE))) { if (!calcRangeRB.isSelected()) { currentTrack.setProperty(TimeSeriesConstants.AUTO_DETECT_RANGE, "false"); changed = true; } } if ((track != null) && (track.getRange() != null)) { float min = 0; float max = 100; Object minObj = minTF.getValue(); Object maxObj = maxTF.getValue(); if (minObj instanceof Double) { min = ((Double) minObj).floatValue(); } else if (minObj instanceof Long) { min = ((Long) minObj).floatValue(); } else if (minObj instanceof Float) { min = ((Float) minObj).floatValue(); } if (maxObj instanceof Double) { max = ((Double) maxObj).floatValue(); } else if (maxObj instanceof Long) { max = ((Long) maxObj).floatValue(); } else if (maxObj instanceof Float) { max = ((Float) maxObj).floatValue(); } if ((track.getRange()[0] != min) || (track.getRange()[1] != max)) { track.setRange(new float[] { min, max }); changed = true; } } if (track != null) { if (unitTF.getText() != null) { String units = unitTF.getText().trim(); if (!units.equals(track.getUnitString())) { track.setUnitString(units); changed = true; } } if (track.getColor() != colorButton.getBackground()) { track.setColor(colorButton.getBackground()); changed = true; } } if (changed) { notifyListeners(new TimeSeriesChangeEvent(currentTrack, TimeSeriesChangeEvent.CHANGE, TimeSeriesChangeEvent.TRACK)); reextractTracks(); updateForTrack(currentTrack.getTrackName()); } } } /** * Removes a track from the source configuration, notifies listeners. */ private void doDelete() { if (currentTrack != null) { tracks.remove(currentTrack); config.removeObject(currentTrack.getTrackName()); reextractTracks(); notifyListeners(new TimeSeriesChangeEvent(currentTrack, TimeSeriesChangeEvent.DELETE, TimeSeriesChangeEvent.TRACK)); if (currentTracksCB.getItemCount() > 0) { updateForTrack((String) currentTracksCB.getItemAt(0)); } else { updateForTrack(null); } } } /** * Creates a warning message dialog with the specified message. * * @param message the message */ private void showWarningMessage(String message) { JOptionPane.showMessageDialog(this, message, ElanLocale.getString("Message.Warning"), JOptionPane.WARNING_MESSAGE); } /** * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) * * @param event action event */ public void actionPerformed(ActionEvent event) { if (event.getSource() == changeButton) { switch (mode) { case ADD: doAdd(); break; case CHANGE: doChange(); break; case DELETE: doDelete(); } } else if (event.getSource() == colorButton) { selectColor(); } } /** * @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent) */ public void stateChanged(ChangeEvent e) { if (e.getSource() == tabPane) { mode = tabPane.getSelectedIndex(); updateForMode(); } else if (e.getSource() == calcRangeRB) { minTF.setEnabled(false); minTF.setEditable(false); maxTF.setEnabled(false); maxTF.setEditable(false); } else if (e.getSource() == manRangeRB) { minTF.setEnabled(true); minTF.setEditable(true); maxTF.setEnabled(true); maxTF.setEditable(true); } else if (e.getSource() == rowSpinner) { if (rowSpinner.getValue() instanceof Integer) { int row = ((Integer) rowSpinner.getValue()).intValue(); colSpinModel.setMaximum(new Integer(DataGloveConstants.COLS_PER_ROW[row] - 1)); // zero based colSpinner.setValue(new Integer(0)); } } else if (e.getSource() == singleCellRB) { rowSpinner.setEnabled(true); colSpinner.setEnabled(true); multiCellButton.setEnabled(false); } else if (e.getSource() == multiCellRB) { rowSpinner.setEnabled(false); colSpinner.setEnabled(false); multiCellButton.setEnabled(true); } } /** * ComboBox selection changes. * * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent) */ public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { String trackName = (String) currentTracksCB.getSelectedItem(); updateForTrack(trackName); } } /** * Update the ui after selection of a tier in the table (except for ADD * mode). * * @param e the list selection event */ public void valueChanged(ListSelectionEvent e) { int row = trackTable.getSelectedRow(); if (row > -1) { int column = model.findColumn(TrackTableModel.NAME); updateForTrack((String) model.getValueAt(row, column)); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -