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

📄 oscilloscope.java

📁 无线传感器网络操作系统源代码
💻 JAVA
字号:
/* * "Copyright (c) 2001 and The Regents of the University * of California.  All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice and the following * two paragraphs appear in all copies of this software. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." * * $\Id$ *//** * File: oscilloscope.java * * Description: * Displays data coming from the apps/oscilloscope application. * * Requires that the SerialForwarder is already started. * * @author Jason Hill and Eric Heien */package net.tinyos.oscilloscope;import net.tinyos.util.*;import java.util.*;
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.sql.Time;

public class oscilloscope extends JPanel implements ActionListener, ItemListener, ChangeListener {

    Button timeout = new Button("Control Panel");
    Button move_up = new Button("^");
    Button move_down = new Button("v");
    Button move_right = new Button(">");
    Button move_left = new Button("<");
    Button zoom_out_x = new Button("Zoom Out X");
    Button zoom_in_x = new Button("Zoom In X");
    Button zoom_out_y = new Button("Zoom Out Y");
    Button zoom_in_y = new Button("Zoom In Y");
    Button reset = new Button("Reset");
    Button save_data = new Button("Save Data");
    Button load_data = new Button("Load Data");
    Button editLegend = new Button("Edit Legend");
    Button clear_data = new Button("Clear Dataset");
    Checkbox showLegend = new Checkbox("Show Legend", true);
    Checkbox connect_points = new Checkbox("Connect Datapoints", true);
    Checkbox scrolling = new Checkbox("Scrolling", false);
    JSlider time_location = new JSlider(0, 5000, 5000);
    
    public JTextField legendEdit[];
    public JCheckBox legendActive[];

    public JLabel high_pass_val= new JLabel("5");
    public JLabel low_pass_val = new JLabel("2");
    public JLabel cutoff_val = new JLabel("65");
    public JSlider high_pass= new JSlider(0, 30, 5);
    public JSlider low_pass = new JSlider(0, 30, 2);
    public JSlider cutoff = new JSlider(0, 4000, 65);

    GraphPanel panel;
    Panel controlPanel;

    public void init() {
        time_location.addChangeListener(this);
	setLayout(new BorderLayout());
	panel = new GraphPanel(this);
	add("Center", panel);
	controlPanel = new Panel();
	add("South", controlPanel);	

	Panel x_pan = new Panel();
	x_pan.setLayout(new GridLayout(5,1));
	x_pan.add(zoom_in_x);
	x_pan.add(zoom_out_x); 
	x_pan.add(save_data); 
	x_pan.add(editLegend); 
	x_pan.add(clear_data); 
	zoom_out_x.addActionListener(this);
	zoom_in_x.addActionListener(this);
	save_data.addActionListener(this);
	editLegend.addActionListener(this);
	clear_data.addActionListener(this);
	controlPanel.add(x_pan);

	Panel y_pan = new Panel();
	y_pan.setLayout(new GridLayout(5,1));
	y_pan.add(zoom_in_y);
	y_pan.add(zoom_out_y); 
	y_pan.add(load_data); 
	y_pan.add(showLegend); 
	y_pan.add(connect_points); 
	zoom_out_y.addActionListener(this);
	zoom_in_y.addActionListener(this);
	load_data.addActionListener(this);
	showLegend.addItemListener(this);
	connect_points.addItemListener(this);
	controlPanel.add(y_pan);

	Panel scroll_pan = new Panel();
	move_up.addActionListener(this);
	move_down.addActionListener(this);
	move_right.addActionListener(this);
	move_left.addActionListener(this);
	reset.addActionListener(this);
	GridBagLayout		g = new GridBagLayout();
	GridBagConstraints	c = new GridBagConstraints();
	scroll_pan.setLayout(g);
	c.gridx = 1;
	c.gridy = 0;
	g.setConstraints( move_up, c );
	scroll_pan.add(move_up);
	c.gridx = 0;
	c.gridy = 1;
	g.setConstraints( move_left, c );
	scroll_pan.add(move_left);
	c.gridx = 1;
	c.gridy = 1;
	g.setConstraints( reset, c );
	scroll_pan.add(reset);
	c.gridx = 2;
	c.gridy = 1;
	g.setConstraints( move_right, c );
	scroll_pan.add(move_right);
	c.gridx = 1;
	c.gridy = 2;
	g.setConstraints( move_down, c );
	scroll_pan.add(move_down);
	controlPanel.add(scroll_pan);
	


	//controlPanel.add(timeout);
	timeout.addActionListener(this);
	Panel p = new Panel();
	p.setLayout(new GridLayout(3, 1));
	p.add(scrolling); scrolling.addItemListener(this);
	p.add(time_location);
	p.add(timeout);
	controlPanel.add(p);

	panel.repaint();
	repaint();

	legendEdit = new JTextField[panel.num_channels];
	for( int i=0;i<panel.num_channels;i++ )
		legendEdit[i] = new JTextField(128);

	legendActive = new JCheckBox[panel.num_channels];
	for( int i=0;i<panel.num_channels;i++ )
		legendActive[i] = new JCheckBox("Plot "+(i+1));
    }

    public void destroy() {
        remove(panel);
        remove(controlPanel);
    }

    public void start() {
	panel.start();
    }

    public void stop() {
	panel.stop();
    }

    public void actionPerformed(ActionEvent e) {
	Object src = e.getSource();
	for( int i=0;i<panel.num_channels;i++ ) {
		if( legendEdit[i] == src ) {
			panel.dataLegend[i] = legendEdit[i].getText();
			panel.repaint( 100 );
		}
	}

	if (src == zoom_out_x) {
	  panel.zoom_out_x();
	  panel.repaint();
	} else if (src == zoom_in_x) {
	  panel.zoom_in_x();
	  panel.repaint();
	} else if (src == zoom_out_y) {
	  panel.zoom_out_y();
	  panel.repaint();
	} else if (src == zoom_in_y) {
	  panel.zoom_in_y();
	  panel.repaint();
	} else if (src == move_up) {
	  panel.move_up();
	  panel.repaint();
	} else if (src == move_down) {
	  panel.move_down();
	  panel.repaint();
	} else if (src == move_right) {
	  panel.move_right();
	  panel.repaint();
	} else if (src == move_left) {
	  panel.move_left();
	  panel.repaint();
	} else if (src == reset) {
	  panel.reset();
	  panel.repaint();
	} else if (src == load_data) {
	  panel.load_data();
	  panel.repaint();
	} else if (src == clear_data) {
	  panel.clear_data();
	  panel.repaint();
	} else if (src == save_data) {
	  panel.save_data();
	  panel.repaint();
	} else if (src == editLegend) {
	  JFrame legend = new JFrame("Edit Legend");
	  legend.setSize(new Dimension(200,500));
	  legend.setVisible(true);
	  Panel slp = new Panel();
	  slp.setLayout(new GridLayout(10,2));
	  for( int i=0;i<panel.num_channels;i++ ) {
		legendActive[i].setSelected( panel.legendActive[i] );
		slp.add( legendActive[i] );
		legendActive[i].addChangeListener(this);
		legendEdit[i].setText( panel.dataLegend[i] );
		slp.add( legendEdit[i] );
		legendEdit[i].addActionListener(this);
	  }
	  legend.getContentPane().add(slp);
	  legend.pack();
	  legend.repaint();
	} else if (src == timeout) {
    JFrame sliders = new JFrame("Filter Controls");
	sliders.setSize(new Dimension(300,30));
	sliders.setVisible(true);
	Panel slp = new Panel();
	slp.setLayout(new GridLayout(3,3));
    	slp.add(new Label("high_pass:"));
    	slp.add(high_pass);
    	slp.add(high_pass_val);
    	slp.add(new Label("low_pass:"));
    	slp.add(low_pass);
    	slp.add(low_pass_val);
    	slp.add(new Label("cutoff:"));
    	slp.add(cutoff);
    	slp.add(cutoff_val);
    	high_pass.addChangeListener(this);
    	low_pass.addChangeListener(this);
    	cutoff.addChangeListener(this);
	sliders.getContentPane().add(slp);
	sliders.pack();
	sliders.repaint();
	}
    }


    public void itemStateChanged(ItemEvent e) {
	Object src = e.getSource();
	boolean on = e.getStateChange() == ItemEvent.SELECTED;
	if (src == scrolling) {
		panel.sliding = on;
	} else if (src == showLegend) {
		panel.legend = on;
		panel.repaint(100);
	} else if (src == connect_points) {
		panel.connectPoints = on;
		panel.repaint(100);
	}
    }

    public void stateChanged(ChangeEvent e){
	Object src = e.getSource();
	if(src == time_location){
		panel.start -= panel.end - time_location.getValue();
		panel.end = time_location.getValue();
	}
	high_pass_val.setText("" + high_pass.getValue());
	cutoff_val.setText("" + cutoff.getValue());
	low_pass_val.setText("" + low_pass.getValue());
	for( int i=0;i<panel.num_channels;i++ )
		if( src == legendActive[i] )
			panel.legendActive[i] = legendActive[i].isSelected();

	panel.repaint( 100 );
    }

static oscilloscope app;
static Frame mainFrame;
public static void main(String[] args) {
    mainFrame = new Frame("Oscilloscope");
    app = new oscilloscope();
    app.init();
    mainFrame.setSize( app.getSize() );
    mainFrame.add("Center", app);
    mainFrame.show();
    mainFrame.repaint(1000);
    app.panel.repaint();
    mainFrame.addWindowListener
      (
        new WindowAdapter()
        {
          public void windowClosing    ( WindowEvent wevent )
          {
            System.exit(0);
          }
        }
      );
    app.start();
  }
    public Dimension getSize()
    {
	return new Dimension(600, 600);
    }

}

⌨️ 快捷键说明

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