我在做一个文本编辑器是遇到一些问题,请高手指点一下
代码如下:
事件处理
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);
}
}
运行的时候提示我数组越界,那里不对,请高手指点一下,谢谢~~~
代码如下:
事件处理
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);
}
}
运行的时候提示我数组越界,那里不对,请高手指点一下,谢谢~~~
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行的时候就会出错。
this.creatLine();
}这句我检查了如果行不够的情况,如果行不够就在向量中加入新的行,直到要设置的行。
为什么设置第10行的时候就会出错呢?