⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 areaviewer.java

📁 Contiki是一个开源
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        int width = getWidth();        int height = getHeight();        double diff = coloringHighest - coloringLowest;        int textHeight = g.getFontMetrics().getHeight();        // If computing        if (attenuatorThread != null && attenuatorThread.isAlive()) {          g.setColor(Color.WHITE);          g.fillRect(0, 0, width, height);          g.setColor(Color.BLACK);          String stringToDraw = "[calculating]";          g.drawString(stringToDraw, width/2 - g.getFontMetrics().stringWidth(stringToDraw)/2, height/2 + textHeight/2);          return;        }        // Check for infinite values        if (Double.isInfinite(coloringHighest) || Double.isInfinite(coloringLowest)) {          g.setColor(Color.WHITE);          g.fillRect(0, 0, width, height);          g.setColor(Color.BLACK);          String stringToDraw = "INFINITE VALUES EXIST";          g.drawString(stringToDraw, width/2 - g.getFontMetrics().stringWidth(stringToDraw)/2, height/2 + textHeight/2);          return;        }        // Check if values are constant        if (diff == 0) {          g.setColor(Color.WHITE);          g.fillRect(0, 0, width, height);          g.setColor(Color.BLACK);          NumberFormat formatter = DecimalFormat.getNumberInstance();          String stringToDraw = "CONSTANT VALUES (" + formatter.format(coloringHighest) + ")";          g.drawString(stringToDraw, width/2 - g.getFontMetrics().stringWidth(stringToDraw)/2, height/2 + textHeight/2);          return;        }        for (int i=0; i < width; i++) {          double paintValue = coloringLowest + (double) i / (double) width * diff;          g.setColor(              new Color(                  getColorOfSignalStrength(paintValue, coloringLowest, coloringHighest)));          g.drawLine(i, 0, i, height);        }        if (dataTypeToVisualize == ChannelModel.TransmissionData.PROB_OF_RECEPTION) {          NumberFormat formatter = DecimalFormat.getPercentInstance();          g.setColor(Color.BLACK);          g.drawString(formatter.format(coloringLowest), 3, textHeight);          String stringToDraw = formatter.format(coloringHighest);          g.drawString(stringToDraw, width - g.getFontMetrics().stringWidth(stringToDraw) - 3, textHeight);        } else if (dataTypeToVisualize == ChannelModel.TransmissionData.SIGNAL_STRENGTH ||            dataTypeToVisualize == ChannelModel.TransmissionData.SIGNAL_STRENGTH_VAR ) {          NumberFormat formatter = DecimalFormat.getNumberInstance();          g.setColor(Color.BLACK);          g.drawString(formatter.format(coloringLowest) + "dBm", 3, textHeight);          String stringToDraw = formatter.format(coloringHighest) + "dBm";          g.drawString(stringToDraw, width - g.getFontMetrics().stringWidth(stringToDraw) - 3, textHeight);        } else if (dataTypeToVisualize == ChannelModel.TransmissionData.SNR ||            dataTypeToVisualize == ChannelModel.TransmissionData.SNR_VAR) {          NumberFormat formatter = DecimalFormat.getNumberInstance();          g.setColor(Color.BLACK);          g.drawString(formatter.format(coloringLowest) + "dB", 3, textHeight);          String stringToDraw = formatter.format(coloringHighest) + "dB";          g.drawString(stringToDraw, width - g.getFontMetrics().stringWidth(stringToDraw) - 3, textHeight);        } else if (dataTypeToVisualize == ChannelModel.TransmissionData.DELAY_SPREAD_RMS) {          NumberFormat formatter = DecimalFormat.getNumberInstance();          g.setColor(Color.BLACK);          g.drawString(formatter.format(coloringLowest) + "us", 3, textHeight);          String stringToDraw = formatter.format(coloringHighest) + "us";          g.drawString(stringToDraw, width - g.getFontMetrics().stringWidth(stringToDraw) - 3, textHeight);        }      }    };    coloringIntervalPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));    Dimension colorPanelSize = new Dimension(200, 20);    coloringIntervalPanel.setPreferredSize(colorPanelSize);    coloringIntervalPanel.setMinimumSize(colorPanelSize);    coloringIntervalPanel.setMaximumSize(colorPanelSize);    coloringIntervalPanel.setAlignmentX(Component.LEFT_ALIGNMENT);    visualizeChannelPanel.add(coloringIntervalPanel);    // Choose channel output to visualize    visualizeChannelPanel.add(Box.createRigidArea(new Dimension(0,20)));    visualizeChannelPanel.add(new JLabel("Visualize:"));    JRadioButton signalStrengthButton = new JRadioButton("Signal strength");    signalStrengthButton.setActionCommand("signalStrengthButton");    signalStrengthButton.setSelected(true);    signalStrengthButton.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {        dataTypeToVisualize = ChannelModel.TransmissionData.SIGNAL_STRENGTH;      }    });    visualizeChannelPanel.add(signalStrengthButton);    JRadioButton signalStrengthVarButton = new JRadioButton("Signal strength variance");    signalStrengthVarButton.setActionCommand("signalStrengthVarButton");    signalStrengthVarButton.setSelected(false);    signalStrengthVarButton.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {        dataTypeToVisualize = ChannelModel.TransmissionData.SIGNAL_STRENGTH_VAR;      }    });    visualizeChannelPanel.add(signalStrengthVarButton);    JRadioButton SNRButton = new JRadioButton("Signal to Noise ratio");    SNRButton.setActionCommand("SNRButton");    SNRButton.setSelected(false);    SNRButton.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {        dataTypeToVisualize = ChannelModel.TransmissionData.SNR;      }    });    visualizeChannelPanel.add(SNRButton);    JRadioButton SNRVarButton = new JRadioButton("Signal to Noise variance");    SNRVarButton.setActionCommand("SNRVarButton");    SNRVarButton.setSelected(false);    SNRVarButton.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {        dataTypeToVisualize = ChannelModel.TransmissionData.SNR_VAR;      }    });    visualizeChannelPanel.add(SNRVarButton);    JRadioButton probabilityButton = new JRadioButton("Probability of reception");    probabilityButton.setActionCommand("probabilityButton");    probabilityButton.setSelected(false);    probabilityButton.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {        dataTypeToVisualize = ChannelModel.TransmissionData.PROB_OF_RECEPTION;      }    });    visualizeChannelPanel.add(probabilityButton);    JRadioButton rmsDelaySpreadButton = new JRadioButton("RMS delay spread");    rmsDelaySpreadButton.setActionCommand("rmsDelaySpreadButton");    rmsDelaySpreadButton.setSelected(false);    rmsDelaySpreadButton.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {        dataTypeToVisualize = ChannelModel.TransmissionData.DELAY_SPREAD_RMS;      }    });    visualizeChannelPanel.add(rmsDelaySpreadButton);    visTypeSelectionGroup = new ButtonGroup();    visTypeSelectionGroup.add(signalStrengthButton);    visTypeSelectionGroup.add(signalStrengthVarButton);    visTypeSelectionGroup.add(SNRButton);    visTypeSelectionGroup.add(SNRVarButton);    visTypeSelectionGroup.add(probabilityButton);    visTypeSelectionGroup.add(rmsDelaySpreadButton);    visualizeChannelPanel.add(Box.createRigidArea(new Dimension(0,20)));    visualizeChannelPanel.add(new JLabel("Resolution:"));    resolutionSlider = new JSlider(JSlider.HORIZONTAL, 30, 600, 100);    resolutionSlider.setMajorTickSpacing(100);    resolutionSlider.setPaintTicks(true);    resolutionSlider.setPaintLabels(true);    resolutionSlider.setAlignmentX(Component.LEFT_ALIGNMENT);    visualizeChannelPanel.add(resolutionSlider);    visualizeChannelPanel.add(Box.createRigidArea(new Dimension(0,20)));    JButton recalculateVisibleButton = new JButton("Paint radio channel");    recalculateVisibleButton.setActionCommand("recalculate visible area");    recalculateVisibleButton.addActionListener(formulaHandler);    visualizeChannelPanel.add(recalculateVisibleButton);    // Create control panel    controlPanel = new JPanel();    controlPanel.setLayout(new BoxLayout(controlPanel, BoxLayout.Y_AXIS));    graphicsComponentsPanel.setAlignmentX(Component.LEFT_ALIGNMENT);    controlPanel.add(graphicsComponentsPanel);    controlPanel.add(new JSeparator());    controlPanel.add(Box.createRigidArea(new Dimension(0, 5)));    visualizeChannelPanel.setAlignmentX(Component.LEFT_ALIGNMENT);    controlPanel.add(visualizeChannelPanel);    controlPanel.setPreferredSize(new Dimension(250,700));    controlPanel.setAlignmentX(Component.LEFT_ALIGNMENT);    scrollControlPanel = new JScrollPane(        controlPanel,        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,        JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);    scrollControlPanel.setPreferredSize(new Dimension(250,0));    // Add everything    this.setLayout(new BorderLayout());    this.add(BorderLayout.CENTER, canvas); // Add canvas    this.add(BorderLayout.EAST, scrollControlPanel);    // Load external images (antenna)    Toolkit toolkit = Toolkit.getDefaultToolkit();    URL imageURL = this.getClass().getClassLoader().getResource(antennaImageFilename);    antennaImage = toolkit.getImage(imageURL);    MediaTracker tracker = new MediaTracker(canvas);    tracker.addImage(antennaImage, 1);    try {      tracker.waitForAll();    } catch (InterruptedException ex) {      logger.fatal("Interrupted during image loading, aborting");      return;    }    // Try to select current plugin    try {      setSelected(true);    } catch (java.beans.PropertyVetoException e) {      // Could not select    }  }  /**   * Listens to mouse event on canvas   */  private MouseListener canvasMouseHandler = new MouseListener() {    public void mouseReleased(MouseEvent e) {    }    public void mouseExited(MouseEvent e) {    }    public void mouseClicked(MouseEvent e) {      if (inSelectMode) {        Vector<Radio> hitRadios = trackClickedRadio(e.getPoint());        if (hitRadios == null || hitRadios.size() == 0) {          if (e.getButton() != MouseEvent.BUTTON1) {            selectedRadio = null;            channelImage = null;            canvas.repaint();          }          return;        }        if (hitRadios.size() == 1 && hitRadios.firstElement() == selectedRadio) {          return;        }        if (selectedRadio == null || !hitRadios.contains(selectedRadio)) {          selectedRadio = hitRadios.firstElement();        } else {          // Select next in list          selectedRadio = hitRadios.get(              (hitRadios.indexOf(selectedRadio)+1) % hitRadios.size()          );        }        channelImage = null;        canvas.repaint();      } else if (inTrackMode && selectedRadio != null) {        // Calculate real clicked position        double realClickedX = e.getX() / currentZoomX - currentPanX;        double realClickedY = e.getY() / currentZoomY - currentPanY;        Position radioPosition = currentRadioMedium.getRadioPosition(selectedRadio);        final double radioX = radioPosition.getXCoordinate();        final double radioY = radioPosition.getYCoordinate();        trackedComponents = currentChannelModel.getRaysOfTransmission(radioX, radioY, realClickedX, realClickedY);        canvas.repaint();      }    }    public void mouseEntered(MouseEvent e) {    }    public void mousePressed(MouseEvent e) {      lastHandledPosition = new Point(e.getX(), e.getY());      // Set zoom center (real world)      zoomCenterX = e.getX() / currentZoomX - currentPanX;      zoomCenterY = e.getY() / currentZoomY - currentPanY;      zoomCenterPoint = e.getPoint();    }  };  /**   * Listens to mouse movements when in pan mode   */  private MouseMotionListener canvasPanModeHandler = new MouseMotionListener() {    public void mouseMoved(MouseEvent e) {    }    public void mouseDragged(MouseEvent e) {      if (lastHandledPosition == null) {        lastHandledPosition = e.getPoint();        return;      }      // Pan relative to mouse movement and current zoom      // This way the mouse "lock" to the canvas      currentPanX += ((e.getX() - lastHandledPosition.x)) / currentZoomX;      currentPanY += ((e.getY() - lastHandledPosition.y)) / currentZoomY;      lastHandledPosition = e.getPoint();      canvas.repaint();    }  };  /**   * Listens to mouse movements when in zoom mode   */  private MouseMotionListener canvasZoomModeHandler = new MouseMotionListener() {    public void mouseMoved(MouseEvent e) {    }    public void mouseDragged(MouseEvent e) {      if (lastHandledPosition == null) {        lastHandledPosition = e.getPoint();        return;      }      // Zoom relative to mouse movement (keep XY-proportions)      currentZoomY += 0.005 * currentZoomY * ((lastHandledPosition.y - e.getY()));      currentZoomY = Math.max(0.05, currentZoomY);      currentZoomY = Math.min(1500, currentZoomY);      currentZoomX = currentZoomY;      // We also need to update the current pan in order to zoom towards the mouse      currentPanX =  zoomCenterPoint.x/currentZoomX - zoomCenterX;      currentPanY =  zoomCenterPoint.y/currentZoomY - zoomCenterY;      lastHandledPosition = e.getPoint();      canvas.repaint();    }  };  /**   * Selects which mouse mode the canvas should be in (select/pan/zoom)   */  private ActionListener canvasModeHandler = new ActionListener() {    public void actionPerformed(ActionEvent e) {      if (e.getActionCommand().equals("set select mode")) {        // Select mode, no mouse motion listener needed        for (MouseMotionListener reggedListener: canvas.getMouseMotionListeners()) {          canvas.removeMouseMotionListener(reggedListener);        }        inTrackMode = false;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -