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

📄 spreadsheetmodel.java

📁 learning java的源代码。书中每个实例都有相关的代码example。
💻 JAVA
字号:
//file: SpreadsheetModel.javaimport java.util.StringTokenizer;import javax.swing.*;import javax.swing.table.AbstractTableModel;import java.awt.event.*;public class SpreadsheetModel extends AbstractTableModel {  Expression [][] data;  public SpreadsheetModel( int rows, int cols ) {    data = new Expression [rows][cols];  }  public void setValueAt(Object value, int row, int col) {    data[row][col] = new Expression( (String)value );    fireTableDataChanged(  );  }  public Object getValueAt( int row, int col ) {    if ( data[row][col] != null )      try { return data[row][col].eval(  ) + ""; }      catch ( BadExpression e ) { return "Error"; }    return "";  }  public int getRowCount(  ) { return data.length; }  public int getColumnCount(  ) { return data[0].length; }  public boolean isCellEditable(int row, int col) { return true; }  class Expression {    String text;    StringTokenizer tokens;    String token;    Expression( String text ) { this.text = text.trim(  ); }    float eval(  ) throws BadExpression {      tokens = new StringTokenizer( text, " */+-(  )", true );      try { return sum(  ); }      catch ( Exception e ) { throw new BadExpression(  ); }    }    private float sum(  ) {      float value = term(  );      while( more(  ) && match("+-") )        if ( match("+") ) { consume(); value = value + term(  ); }        else { consume(); value = value - term(  ); }      return value;    }    private float term(  ) {      float value = element(  );      while( more(  ) && match( "*/") )        if ( match("*") ) { consume(); value = value * element(  ); }        else { consume(); value = value / element(  ); }      return value;    }    private float element(  ) {      float value;      if ( match( "(") ) { consume(); value = sum(  ); }      else {        String svalue;        if ( Character.isLetter( token(  ).charAt(0) ) ) {        int col = findColumn( token(  ).charAt(0) + "" );        int row = Character.digit( token(  ).charAt(1), 10 );        svalue = (String)getValueAt( row, col );      } else        svalue = token(  );        value = Float.valueOf( svalue ).floatValue(  );;      }      consume(  ); // ")" or value token      return value;    }    private String token(  ) {      if ( token == null )        while ( (token=tokens.nextToken(  )).equals(" ") );      return token;    }    private void consume(  ) { token = null; }    private boolean match( String s ) { return s.indexOf( token(  ) )!=-1; }    private boolean more() { return tokens.hasMoreTokens(  ); }  }  class BadExpression extends Exception { }  public static void main( String [] args ) {    JFrame frame = new JFrame("Excelsior!");    frame.addWindowListener(new WindowAdapter(  ) {      public void windowClosing(WindowEvent we) { System.exit(0); }    });    JTable table = new JTable( new SpreadsheetModel(15, 5) );    table.setPreferredScrollableViewportSize(        table.getPreferredSize(  ) );    table.setCellSelectionEnabled(true);    frame.getContentPane(  ).add( new JScrollPane( table ) );    frame.pack(); frame.show(  );  }}

⌨️ 快捷键说明

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