📄 messagetable.java
字号:
else if( ltoken.equals("time") ) entry.type = TYPE_TIME; else if( ltoken.equals("counter") ) entry.type = TYPE_COUNTER; else if( ltoken.equals("omit") ) entry.modifier |= MODIFIER_OMIT; else if( ltoken.equals("unique") ) entry.modifier |= MODIFIER_UNIQUE; else if( ltoken.equals("const") ) entry.modifier |= MODIFIER_OMIT | MODIFIER_CONST; else { errorText.setText("unknown type or modifier: " + token); break; } } else if( ltoken.equals("=") && tokens.hasMoreTokens() ) entry.defValue = tokens.nextToken(); else if( entry.title == null ) entry.title = token; else { errorText.setText("extra token found: " + token); break; } } addEntry(entry); } void updateUniqueEntries() { int size = 0; for(int i = 0; i < entries.size(); ++i) { Entry entry = (Entry)entries.get(i); if( (entry.modifier & MODIFIER_UNIQUE) != 0 ) ++size; } uniqueEntries = new int[size]; size = 0; for(int i = 0; i < entries.size(); ++i) { Entry entry = (Entry)entries.get(i); if( (entry.modifier & MODIFIER_UNIQUE) != 0 ) uniqueEntries[size++] = i; } } void resetEntries(String text) { setColumnCount(0); setRowCount(0); rowCount.setText("row count:"); entries.clear(); packetLength = 0; StringTokenizer lines = new StringTokenizer(text, "\n\r\f"); while( lines.hasMoreTokens() ) addEntry(lines.nextToken()); updateUniqueEntries(); lenText.setText(Integer.toString(packetLength)); fireTableStructureChanged(); } void removeRows(int[] rows) { int i = rows.length; while( --i >= 0 ) removeRow(rows[i]); fireTableDataChanged(); } void sendByte(int a) { packet[packetIndex++] = (byte)a; } void sendShort(int a) { packet[packetIndex++] = (byte)a; packet[packetIndex++] = (byte)(a >> 8); } void sendInt24(int a) { packet[packetIndex++] = (byte)a; packet[packetIndex++] = (byte)(a >> 8); packet[packetIndex++] = (byte)(a >> 16); } void sendInt(int a) { packet[packetIndex++] = (byte)a; packet[packetIndex++] = (byte)(a >> 8); packet[packetIndex++] = (byte)(a >> 16); packet[packetIndex++] = (byte)(a >> 24); } void sendEntry(Entry entry) { if( (entry.modifier & MODIFIER_OMIT) != 0 ) entry.value = entry.defValue; switch(entry.type) { case TYPE_UINT8: case TYPE_INT8: case TYPE_HEX8: sendByte(parseInt(entry.value)); break; case TYPE_UINT16: case TYPE_INT16: case TYPE_HEX16: sendShort(parseInt(entry.value)); break; case TYPE_UINT24: case TYPE_INT24: case TYPE_HEX24: sendInt24(parseInt(entry.value)); break; case TYPE_UINT32: case TYPE_INT32: case TYPE_HEX32: sendInt(parseInt(entry.value)); break; case TYPE_FLOAT: sendInt(Float.floatToIntBits(parseFloat(entry.value))); break; } } void sendRow(int index) { packet = new byte[packetLength]; packetIndex = 0; String text = "sending message " + index; errorText.setText(text); for(int i = 0; i < entries.size(); ++i) { Entry entry = (Entry)entries.get(i); if( entry.column >= 0 ) entry.value = (String)getValueAt(index, entry.column); sendEntry(entry); } if( text.equals(errorText.getText()) ) // if no error { // broadcast it now SerialConnector.instance().sendMessage(0xFFFF, (short)amType, (short)0, packet); } } void sendRows(int[] rows) { for(int i = 0; i < rows.length; ++i) sendRow(rows[i]); } class RowComparator implements Comparator { int column = 0; public RowComparator(int column) { this.column = column; } public int compare(Object o1, Object o2) { if( o1 == null ) return -1; if( o2 == null ) return 1; Comparable c1 = (Comparable)((Vector)o1).get(column); Comparable c2 = (Comparable)((Vector)o2).get(column); return c1.compareTo(c2); } }; void sort(int column) { Collections.sort(dataVector, new RowComparator(column)); } }; int amType; private MyTableModel tableModel = new MyTableModel(); int parseInt(String value) { try { if(value == null) return 0; else if(value.trim().toUpperCase().startsWith("0X")) return Integer.parseInt(value.trim().substring(2),16); else return Integer.parseInt(value.trim()); } catch(RuntimeException e) { errorText.setText("invalid integer format: " + value); return 0; } } float parseFloat(String value) { try { if( value == null ) return 0; else return Float.parseFloat(value); } catch(RuntimeException e) { errorText.setText("invalid float format: " + value); return 0; } } public class MyColumnListener extends MouseAdapter { public void mouseClicked(MouseEvent event) { if( event.getClickCount() != 2 ) return; int index = table.getColumnModel().getColumnIndexAtX(event.getX()); index = table.convertColumnIndexToModel(index); if( index < 0 ) return; tableModel.sort(index); } }; Preferences prefs = null; /** Creates new form MessageTable */ public MessageTable() { super("MessageTable"); initComponents(); table.getTableHeader().addMouseListener(new MyColumnListener()); prefs = Preferences.userNodeForPackage(this.getClass()); prefs = prefs.node(prefs.absolutePath()+"/MessageTable"); loadComboBox(); SerialConnector.instance().registerPacketListener(this, SerialConnector.GET_ALL_MESSAGES); } public void sliceFloodRoutingMsg(byte[] packet) { int headerLength = 3; int dataLength = tableModel.packetLength - headerLength; int packetLength = packet[PACKET_LENGTH] & 0xFF; byte[] slice = new byte[PACKET_DATA + headerLength + dataLength]; if ((packetLength-headerLength) % dataLength != 0) return; for(int i = headerLength; i < packetLength; i += dataLength) { slice[PACKET_LENGTH] = (byte)(headerLength + dataLength); System.arraycopy(packet, PACKET_DATA, slice, PACKET_DATA, headerLength); System.arraycopy(packet, PACKET_DATA + i, slice, PACKET_DATA + headerLength, dataLength); tableModel.addPacket(slice); } } public void packetReceived(byte[] packet) { if( (packet[PACKET_TYPE] & 0xFF) == amType ) { if( amType == 130 ) sliceFloodRoutingMsg(packet); else tableModel.addPacket(packet); } } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() {//GEN-BEGIN:initComponents java.awt.GridBagConstraints gridBagConstraints; jPanel2 = new javax.swing.JPanel(); configNameText = new javax.swing.JComboBox(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); errorText = new javax.swing.JTextField(); jPanel3 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); amTypeText = new javax.swing.JTextField(); timeStampBox = new javax.swing.JCheckBox(); counterBox = new javax.swing.JCheckBox(); jScrollPane2 = new javax.swing.JScrollPane(); formatText = new javax.swing.JTextArea(); jLabel2 = new javax.swing.JLabel(); lenText = new javax.swing.JTextField(); firstUniqueBox = new javax.swing.JCheckBox(); jPanel4 = new javax.swing.JPanel(); jPanel1 = new javax.swing.JPanel(); jButton41 = new javax.swing.JButton(); jButton5 = new javax.swing.JButton(); jButton4 = new javax.swing.JButton(); jButton1 = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); table = new javax.swing.JTable(); rowCount = new javax.swing.JTextField(); getContentPane().setLayout(new java.awt.GridBagLayout()); setTitle("Message Table"); setMinimumSize(new java.awt.Dimension(300, 100)); jPanel2.setLayout(new java.awt.GridBagLayout()); jPanel2.setBorder(new javax.swing.border.TitledBorder("Configuration")); configNameText.setEditable(true); configNameText.setMaximumRowCount(100); configNameText.setToolTipText("the name of the configuration"); configNameText.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { configNameTextActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3); jPanel2.add(configNameText, gridBagConstraints); jButton2.setText("Save"); jButton2.setToolTipText("save the current configuration in the preferences"); jButton2.setMaximumSize(new java.awt.Dimension(80, 26)); jButton2.setMinimumSize(new java.awt.Dimension(80, 26)); jButton2.setPreferredSize(new java.awt.Dimension(80, 26)); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -