我在做一个文本编辑器是遇到一些问题,请高手指点一下
代码如下:
事件处理
package liyanpro;import java.awt.event.*;/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */public class Context_C implements KeyListener {
  int x,y;
  Context_M context_m;
  Context_V context_v;
  char c;  public Context_C() {
  }  public void init(Context_M m,Context_V v){
    context_m=m;
    context_v=v;
  }  public void getxy(){
    x=context_v.getX();
    y=context_v.getY();
  }  /**
   * keyPressed
   *
   * @param e KeyEvent
   */
  public void keyPressed(KeyEvent e) {
    c=e.getKeyChar();
    if(c!='\n'){
      this.getxy();
      if(x>80){
        context_v.jTextArea1.append("\n");
        this.getxy();
      }
      context_m.setchar(y,x,c);
    }
  }  /**
   * keyReleased
   *
   * @param e KeyEvent
   */
  public void keyReleased(KeyEvent e) {
  }  /**
   * keyTyped
   *
   * @param e KeyEvent
   */
  public void keyTyped(KeyEvent e) {
  }
}数据处理
package liyanpro;import java.util.*;public class Context_M {
  Vector rows;
  char[] line = null;
  static final int linelength = 80;  public Context_M() {
    rows = new Vector();
    creatLine();
  }  public void creatLine(){
    line = new char[linelength];
    rows.add(line);
  }  public void setchar(int row,int col,char c){
     if(rows.size()-1<row){
       this.creatLine();
     }
     line=(char[])rows.get(row);
       line[col - 1] = c;
       rows.set(row, line);
  }
}
显示
package liyanpro;import java.awt.*;
import javax.swing.*;/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */public class Context_V extends JPanel {
  BorderLayout borderLayout1 = new BorderLayout();
  JTextArea jTextArea1 = new JTextArea();
  Context_C context_c;
  Context_M context_m;
  public Context_V() {
  }  public void init(Context_C c,Context_M m) {
    context_c=c;
    context_m=m;
    this.setLayout(borderLayout1);
    jTextArea1.addKeyListener(context_c);
    this.add(jTextArea1, BorderLayout.CENTER);
  }
}
运行的时候提示我数组越界,那里不对,请高手指点一下,谢谢~~~

解决方案 »

  1.   

    只是看了你的代码,没有运行。估计是这里错误:
      public void setchar(int row,int col,char c){
         if(rows.size()-1<row){
           this.creatLine();
         }
         line=(char[])rows.get(row);
           line[col - 1] = c;
           rows.set(row, line);
      }假如你只有5行,而你要设置第10行的时候就会出错。
      

  2.   

    我在设置第一行第一列的时候就报错了,数组越界。if(rows.size()-1<row){
      this.creatLine();
    }这句我检查了如果行不够的情况,如果行不够就在向量中加入新的行,直到要设置的行。
    为什么设置第10行的时候就会出错呢?