📄 waveformwindow.java
字号:
public void actionPerformed(ActionEvent evt) { togglePanelName(); } }); growPanel = new JButton(iconGrowPanel); growPanel.setBorderPainted(false); growPanel.setDefaultCapable(false); growPanel.setToolTipText("Increase minimum panel height"); minWid = new Dimension(iconGrowPanel.getIconWidth()+4, iconGrowPanel.getIconHeight()+4); growPanel.setMinimumSize(minWid); growPanel.setPreferredSize(minWid); gbc = new GridBagConstraints(); gbc.gridx = 8; gbc.gridy = 0; gbc.anchor = GridBagConstraints.CENTER; overall.add(growPanel, gbc); growPanel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { growPanels(1.25); } }); shrinkPanel = new JButton(iconShrinkPanel); shrinkPanel.setBorderPainted(false); shrinkPanel.setDefaultCapable(false); shrinkPanel.setToolTipText("Decrease minimum panel height"); minWid = new Dimension(iconShrinkPanel.getIconWidth()+4, iconShrinkPanel.getIconHeight()+4); shrinkPanel.setMinimumSize(minWid); shrinkPanel.setPreferredSize(minWid); gbc = new GridBagConstraints(); gbc.gridx = 9; gbc.gridy = 0; gbc.anchor = GridBagConstraints.CENTER; overall.add(shrinkPanel, gbc); shrinkPanel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { growPanels(0.8); } }); // the X axis section that shows the value of the main and extension cursors JPanel xAxisLabelPanel = new JPanel(); xAxisLabelPanel.setLayout(new GridBagLayout()); gbc = new GridBagConstraints(); gbc.gridx = 10; gbc.gridy = 0; gbc.weightx = 1; gbc.weighty = 0; gbc.anchor = GridBagConstraints.CENTER; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets(0, 4, 0, 4); overall.add(xAxisLabelPanel, gbc); mainPos = new JLabel("Main:", JLabel.RIGHT); mainPos.setToolTipText("The main (dashed) X axis cursor"); gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.weightx = 0.2; gbc.weighty = 0; gbc.anchor = GridBagConstraints.CENTER; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets(0, 0, 0, 0); xAxisLabelPanel.add(mainPos, gbc); centerMain = new JButton("Center"); centerMain.setToolTipText("Center the main (dashed) X axis cursor"); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets(2, 4, 2, 0); xAxisLabelPanel.add(centerMain, gbc); centerMain.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { centerCursor(true); } }); extPos = new JLabel("Ext:", JLabel.RIGHT); extPos.setToolTipText("The extension (dotted) X axis cursor"); gbc = new GridBagConstraints(); gbc.gridx = 2; gbc.gridy = 0; gbc.weightx = 0.2; gbc.weighty = 0; gbc.anchor = GridBagConstraints.CENTER; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets(0, 0, 0, 0); xAxisLabelPanel.add(extPos, gbc); centerExt = new JButton("Center"); centerExt.setToolTipText("Center the extension (dotted) X axis cursor"); gbc = new GridBagConstraints(); gbc.gridx = 3; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets(2, 4, 2, 0); xAxisLabelPanel.add(centerExt, gbc); centerExt.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { centerCursor(false); } }); delta = new JLabel("Delta:", JLabel.CENTER); delta.setToolTipText("X distance between cursors"); gbc = new GridBagConstraints(); gbc.gridx = 4; gbc.gridy = 0; gbc.weightx = 0.2; gbc.weighty = 0; gbc.anchor = GridBagConstraints.CENTER; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets(0, 0, 0, 0); xAxisLabelPanel.add(delta, gbc); // the name of the waveform disk file if (sd.getFileURL() != null) { String fileName = TextUtils.getFileNameWithoutExtension(sd.getFileURL()); String ext = TextUtils.getExtension(sd.getFileURL()); if (ext.length() > 0) fileName += "." + ext; diskLabel = new JLabel("File: " + fileName, JLabel.CENTER); diskLabel.setToolTipText("The disk file that is being displayed"); gbc = new GridBagConstraints(); gbc.gridx = 5; gbc.gridy = 0; gbc.weightx = 0.4; gbc.weighty = 0; gbc.anchor = GridBagConstraints.CENTER; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.insets = new Insets(0, 10, 0, 0); xAxisLabelPanel.add(diskLabel, gbc); } // add VCR controls JButton vcrButtonRewind = new JButton(iconVCRRewind); vcrButtonRewind.setBorderPainted(false); vcrButtonRewind.setDefaultCapable(false); vcrButtonRewind.setToolTipText("Rewind main X axis cursor to start"); minWid = new Dimension(iconVCRRewind.getIconWidth()+4, iconVCRRewind.getIconHeight()+4); vcrButtonRewind.setMinimumSize(minWid); vcrButtonRewind.setPreferredSize(minWid); gbc = new GridBagConstraints(); gbc.gridx = 3; gbc.gridy = 1; gbc.anchor = GridBagConstraints.CENTER; overall.add(vcrButtonRewind, gbc); vcrButtonRewind.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { vcrClickRewind(); } }); JButton vcrButtonPlayBackwards = new JButton(iconVCRPlayBackward); vcrButtonPlayBackwards.setBorderPainted(false); vcrButtonPlayBackwards.setDefaultCapable(false); vcrButtonPlayBackwards.setToolTipText("Play main X axis cursor backwards"); minWid = new Dimension(iconVCRPlayBackward.getIconWidth()+4, iconVCRPlayBackward.getIconHeight()+4); vcrButtonPlayBackwards.setMinimumSize(minWid); vcrButtonPlayBackwards.setPreferredSize(minWid); gbc = new GridBagConstraints(); gbc.gridx = 4; gbc.gridy = 1; gbc.anchor = GridBagConstraints.CENTER; overall.add(vcrButtonPlayBackwards, gbc); vcrButtonPlayBackwards.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { vcrClickPlayBackwards(); } }); JButton vcrButtonStop = new JButton(iconVCRStop); vcrButtonStop.setBorderPainted(false); vcrButtonStop.setDefaultCapable(false); vcrButtonStop.setToolTipText("Stop moving main X axis cursor"); minWid = new Dimension(iconVCRStop.getIconWidth()+4, iconVCRStop.getIconHeight()+4); vcrButtonStop.setMinimumSize(minWid); vcrButtonStop.setPreferredSize(minWid); gbc = new GridBagConstraints(); gbc.gridx = 5; gbc.gridy = 1; gbc.anchor = GridBagConstraints.CENTER; overall.add(vcrButtonStop, gbc); vcrButtonStop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { vcrClickStop(); } }); JButton vcrButtonPlay = new JButton(iconVCRPlay); vcrButtonPlay.setBorderPainted(false); vcrButtonPlay.setDefaultCapable(false); vcrButtonPlay.setToolTipText("Play main X axis cursor"); minWid = new Dimension(iconVCRPlay.getIconWidth()+4, iconVCRPlay.getIconHeight()+4); vcrButtonPlay.setMinimumSize(minWid); vcrButtonPlay.setPreferredSize(minWid); gbc = new GridBagConstraints(); gbc.gridx = 6; gbc.gridy = 1; gbc.anchor = GridBagConstraints.CENTER; overall.add(vcrButtonPlay, gbc); vcrButtonPlay.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { vcrClickPlay(); } }); JButton vcrButtonToEnd = new JButton(iconVCRToEnd); vcrButtonToEnd.setBorderPainted(false); vcrButtonToEnd.setDefaultCapable(false); vcrButtonToEnd.setToolTipText("Move main X axis cursor to end"); minWid = new Dimension(iconVCRToEnd.getIconWidth()+4, iconVCRToEnd.getIconHeight()+4); vcrButtonToEnd.setMinimumSize(minWid); vcrButtonToEnd.setPreferredSize(minWid); gbc = new GridBagConstraints(); gbc.gridx = 7; gbc.gridy = 1; gbc.anchor = GridBagConstraints.CENTER; overall.add(vcrButtonToEnd, gbc); vcrButtonToEnd.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { vcrClickToEnd(); } }); JButton vcrButtonFaster = new JButton(iconVCRFaster); vcrButtonFaster.setBorderPainted(false); vcrButtonFaster.setDefaultCapable(false); vcrButtonFaster.setToolTipText("Move main X axis cursor faster"); minWid = new Dimension(iconVCRFaster.getIconWidth()+4, iconVCRFaster.getIconHeight()+4); vcrButtonFaster.setMinimumSize(minWid); vcrButtonFaster.setPreferredSize(minWid); gbc = new GridBagConstraints(); gbc.gridx = 8; gbc.gridy = 1; gbc.anchor = GridBagConstraints.CENTER; overall.add(vcrButtonFaster, gbc); vcrButtonFaster.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { vcrClickFaster(); } }); JButton vcrButtonSlower = new JButton(iconVCRSlower); vcrButtonSlower.setBorderPainted(false); vcrButtonSlower.setDefaultCapable(false); vcrButtonSlower.setToolTipText("Move main X axis cursor slower"); minWid = new Dimension(iconVCRSlower.getIconWidth()+4, iconVCRSlower.getIconHeight()+4); vcrButtonSlower.setMinimumSize(minWid); vcrButtonSlower.setPreferredSize(minWid); gbc = new GridBagConstraints(); gbc.gridx = 9; gbc.gridy = 1; gbc.anchor = GridBagConstraints.CENTER; overall.add(vcrButtonSlower, gbc); vcrButtonSlower.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { vcrClickSlower(); } }); // the single horizontal ruler panel (when the X axes are locked) if (xAxisLocked) { addMainHorizRulerPanel(); } // set bounds of the window from extent of the data Rectangle2D dataBounds = sd.getBounds(); if (dataBounds != null) { double lowTime = dataBounds.getMinX(); double highTime = dataBounds.getMaxX(); double timeRange = highTime - lowTime; setMainXPositionCursor(timeRange*0.2 + lowTime); setExtensionXPositionCursor(timeRange*0.8 + lowTime); setDefaultHorizontalRange(lowTime, highTime); } } private class WaveTable extends JTable { private WaveformWindow ww; WaveTable(TableModel model, WaveformWindow ww) { super(model); this.ww = ww; } } private class WaveTableModel extends DefaultTableModel { public int getColumnCount() { return 2; } public int getRowCount() { int numVisPanels = 0; for(Panel wp : wavePanels) { if (!wp.isHidden()) numVisPanels++; } return numVisPanels; } public Object getValueAt(int row, int col) { int rowNo = 0; for(Panel panel : wavePanels) { if (panel.isHidden()) continue; if (rowNo == row) { if (col == 0) return panel.getLeftHalf(); return panel.getRightHalf(); } rowNo++; } return null; } public void setValueAt(Object obj, int row, int col) {} public Class<?> getColumnClass(int column) { return JPanel.class; } } static class WaveCellEditor extends AbstractCellEditor implements TableCellRenderer, TableCellEditor { private Component lastOne; public WaveCellEditor(JTable table, int column) { super(); TableColumnModel columnModel = table.getColumnModel(); columnModel.getColumn(column).setCellRenderer(this); columnModel.getColumn(column).setCellEditor(this); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { return (Component)table.getValueAt(row, column); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { lastOne = (Component)table.getValueAt(row, column); return lastOne; } public Object getCellEditorValue() { return lastOne; } } private class TableMouseListener implements MouseListener, MouseMotionListener { private int mouseXOffset, mouseYOffset, resizingRow; private TableColumn resizingColumn; private JTable table; public TableMouseListener(JTable table) { this.table = table; table.addMouseListener(this); table.addMouseMotionListener(this); } private TableColumn getResizingColumn(Point p) { int column = table.columnAtPoint(p); if (column == -1) return null; int row = table.rowAtPoint(p); if (row == -1) return null; Rectangle r = table.getCellRect(row, column, true); r.grow(-3, 0); if (r.contains(p)) return null; int midPoint = r.x + r.width / 2; int columnIndex = (p.x < midPoint) ? column - 1 : column; if (columnIndex == -1) return null; return table.getTableHeader().getColumnModel().getColumn(columnIndex); } private int getResizingRow(Point p) { int row = table.rowAtPoint(p); if (row == -1) return -1; int col = table.columnAtPoint(p); if (col == -1) return -1; Rectangle r = table.getCellRect(row, col, true); r.grow(0, -3); if (r.contains(p)) return -1; int midPoint = r.y + r.height / 2; int rowIndex = (p.y < midPoint) ? row - 1 : row; return rowIndex; } public void mouseClicked(MouseEvent e) { // forward event to the panel contents forwardEventToPanel(e); } public void mouseEntered(MouseEvent e) { // forward event to the panel contents forwardEventToPanel(e); } public void mouseExited(MouseEvent e) { // forward event to the panel contents forwardEventToPanel(e); } public void mousePressed(MouseEvent e) { table.getTableHeader().setResizingColumn(null); // figure out if a divider was hit Point p = e.getPoint(); resizingColumn = getResizingColumn(p); if (resizingColumn != null) { resizingRow = -1; table.getTableHeader().setResizingColumn(resizingColumn); mouseXOffset = p.x - resizingColumn.getWidth(); return; } resizingRow = getResizingRow(p); if (resizingRow >= 0) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -