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

📄 window.java

📁 tinyos2.0版本驱动
💻 JAVA
字号:
/* * Copyright (c) 2006 Intel Corporation * All rights reserved. * * This file is distributed under the terms in the attached INTEL-LICENSE      * file. If you do not find these files, copies can be found by writing to * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA,  * 94704.  Attention:  Intel License Inquiry. */import javax.swing.*;import javax.swing.table.*;import javax.swing.event.*;import java.awt.*;import java.awt.event.*;import java.util.*;/* The main GUI object. Build the GUI and coordinate all user activities */class Window{    Oscilloscope parent;    Graph graph;    Font smallFont = new Font("Dialog", Font.PLAIN, 8);    Font boldFont = new Font("Dialog", Font.BOLD, 12);    Font normalFont = new Font("Dialog", Font.PLAIN, 12);    MoteTableModel moteListModel; // GUI view of mote list    JLabel xLabel; // Label displaying X axis range    JTextField sampleText, yText; // inputs for sample period and Y axis range    JFrame frame;    Window(Oscilloscope parent) {	this.parent = parent;    }    /* A model for the mote table, and general utility operations on the mote       list */    class MoteTableModel extends AbstractTableModel {	private ArrayList motes = new ArrayList();	private ArrayList colors = new ArrayList();	/* Initial mote colors cycle through this list. Add more colors if	   you want. */	private Color[] cycle = {	    Color.RED, Color.WHITE, Color.GREEN, Color.MAGENTA,	    Color.YELLOW, Color.GRAY, Color.YELLOW	};	int cycleIndex;	/* TableModel methods for achieving our table appearance */	public String getColumnName(int col) {	    if (col == 0)		return "Mote";	    else		return "Color";	}	public int getColumnCount() { return 2; }	public synchronized int getRowCount() { return motes.size(); }	public synchronized Object getValueAt(int row, int col) {	    if (col == 0)		return motes.get(row);	    else		return colors.get(row);	}        public Class getColumnClass(int col) {            return getValueAt(0, col).getClass();        }	public boolean isCellEditable(int row, int col) { return col == 1; }        public synchronized void setValueAt(Object value, int row, int col) {	    colors.set(row, value);            fireTableCellUpdated(row, col);	    graph.repaint();        }	/* Return mote id of i'th mote */	int get(int i) { return ((Integer)motes.get(i)).intValue(); }		/* Return color of i'th mote */	Color getColor(int i)  { return (Color)colors.get(i); }	/* Return number of motes */	int size() { return motes.size(); }	/* Add a new mote */	synchronized void newNode(int nodeId) {	    /* Shock, horror. No binary search. */	    int i, len = motes.size();	    for (i = 0; ; i++)		if (i == len || nodeId < get(i)) {		    motes.add(i, new Integer(nodeId));		    // Cycle through a set of initial colors		    colors.add(i, cycle[cycleIndex++ % cycle.length]);		    break;		}	    fireTableRowsInserted(i, i);	}	/* Remove all motes */	void clear() {	    motes = new ArrayList();	    colors = new ArrayList();	    fireTableDataChanged();	}    }    /* A simple full-color cell */    static class MoteColor extends JLabel implements TableCellRenderer {	public MoteColor() { setOpaque(true); }	public Component getTableCellRendererComponent	    (JTable table, Object color,	     boolean isSelected, boolean hasFocus, int row, int column) {	    setBackground((Color)color);	    return this;	}    }    /* Convenience methods for making buttons, labels and textfields.       Simplifies code and ensures a consistent style. */    JButton makeButton(String label, ActionListener action) {	JButton button = new JButton();        button.setText(label);        button.setFont(boldFont);	button.addActionListener(action);	return button;    }    JLabel makeLabel(String txt, int alignment) {	JLabel label = new JLabel(txt, alignment);	label.setFont(boldFont);	return label;    }    JLabel makeSmallLabel(String txt, int alignment) {	JLabel label = new JLabel(txt, alignment);	label.setFont(smallFont);	return label;    }    JTextField makeTextField(int columns, ActionListener action) {	JTextField tf = new JTextField(columns);	tf.setFont(normalFont);	tf.setMaximumSize(tf.getPreferredSize());	tf.addActionListener(action);	return tf;    }    /* Build the GUI */    void setup() {	JPanel main = new JPanel(new BorderLayout());	main.setMinimumSize(new Dimension(500, 250));	main.setPreferredSize(new Dimension(800, 400));	// Three panels: mote list, graph, controls	moteListModel = new  MoteTableModel();	JTable moteList = new JTable(moteListModel);	moteList.setDefaultRenderer(Color.class, new MoteColor());	moteList.setDefaultEditor(Color.class, new ColorCellEditor("Pick Mote Color"));	moteList.setPreferredScrollableViewportSize(new Dimension(100, 400));	JScrollPane motePanel = new JScrollPane();	motePanel.getViewport().add(moteList, null);	main.add(motePanel, BorderLayout.WEST);	graph = new Graph(this);	main.add(graph, BorderLayout.CENTER);	// Controls. Organised using box layouts.	// Sample period.	JLabel sampleLabel = makeLabel("Sample period (ms):", JLabel.RIGHT);	sampleText = makeTextField(6, new ActionListener() {		public void actionPerformed(ActionEvent e) { setSamplePeriod(); }	    } );	updateSamplePeriod();	// Clear data.	JButton clearButton = makeButton("Clear data", new ActionListener() {		public void actionPerformed(ActionEvent e) { clearData(); }	    } );	// Adjust X-axis zoom.	Box xControl = new Box(BoxLayout.Y_AXIS);	xLabel = makeLabel("", JLabel.CENTER);	final JSlider xSlider = new JSlider(JSlider.HORIZONTAL, 0, 8, graph.scale);	Hashtable xTable = new Hashtable();	for (int i = 0; i <= 8; i += 2)	    xTable.put(new Integer(i),		       makeSmallLabel("" + (Graph.MIN_WIDTH << i),				      JLabel.CENTER));	xSlider.setLabelTable(xTable);	xSlider.setPaintLabels(true);	graph.updateXLabel();	graph.setScale(graph.scale);	xSlider.addChangeListener(new ChangeListener() {		public void stateChanged(ChangeEvent e) {		    //if (!xSlider.getValueIsAdjusting())			graph.setScale((int)xSlider.getValue());		}	    });	xControl.add(xLabel);	xControl.add(xSlider);	// Adjust Y-axis range.	JLabel yLabel = makeLabel("Y:", JLabel.RIGHT);	yText = makeTextField(12, new ActionListener() {		public void actionPerformed(ActionEvent e) { setYAxis(); }	    } );	yText.setText(graph.gy0 + " - " + graph.gy1);	Box controls = new Box(BoxLayout.X_AXIS);	controls.add(clearButton);	controls.add(Box.createHorizontalGlue());	controls.add(Box.createRigidArea(new Dimension(20, 0)));	controls.add(sampleLabel);	controls.add(sampleText);	controls.add(Box.createHorizontalGlue());	controls.add(Box.createRigidArea(new Dimension(20, 0)));	controls.add(xControl);	controls.add(yLabel);	controls.add(yText);	main.add(controls, BorderLayout.SOUTH);	// The frame part	frame = new JFrame("Oscilloscope");	frame.setSize(main.getPreferredSize());	frame.getContentPane().add(main);	frame.setVisible(true);	frame.addWindowListener(new WindowAdapter() {		public void windowClosing(WindowEvent e) { System.exit(0); }	    });    }    /* User operation: clear data */    void clearData() {	synchronized (parent) {	    moteListModel.clear();	    parent.clear();	    graph.newData();	}    }    /* User operation: set Y-axis range. */    void setYAxis() {	String val = yText.getText();	try {	    int dash = val.indexOf('-');	    if (dash >= 0) {		String min = val.substring(0, dash).trim();		String max = val.substring(dash + 1).trim();		if (!graph.setYAxis(Integer.parseInt(min), Integer.parseInt(max)))		    error("Invalid range " + min + " - " + max + " (expected values between 0 and 65535)");		return;	    }	}	catch (NumberFormatException e) { }	error("Invalid range " + val + " (expected NN-MM)");    }    /* User operation: set sample period. */    void setSamplePeriod() {	String periodS = sampleText.getText().trim();	try {	    int newPeriod = Integer.parseInt(periodS);	    if (parent.setInterval(newPeriod))		return;	}	catch (NumberFormatException e) { }	error("Invalid sample period " + periodS);    }    /* Notification: sample period changed. */    void updateSamplePeriod() {	sampleText.setText("" + parent.interval);    }    /* Notification: new node. */    void newNode(int nodeId) {	moteListModel.newNode(nodeId);    }    /* Notification: new data. */    void newData() {	graph.newData();    }    void error(String msg) {	JOptionPane.showMessageDialog(frame, msg, "Error",				      JOptionPane.ERROR_MESSAGE);    }}

⌨️ 快捷键说明

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