글쓴이 :조신제 1999년 7월 06일 15:34:14
In Reply to: 텍스트필드의 문자열을 텍스트 에어리어로 옮기는데요... posted by 박현아 on 1999년 7월 05일 20:16:55:
import java.awt.*;
import java.awt.event.*;
class Test extends Frame implements TextListener{
TextField textfield;
TextArea textarea;
Test() {
setLayout(new BorderLayout());
TextField textfield = new TextField("hi"); <-- 이부분
TextArea textarea = new TextArea(); <-- 이부분
add(textfield, "North");
add(textarea, "Center");
textfield.addTextListener(this);
setSize(300,300);
doLayout();
setVisible(true);
}
public void textValueChanged(TextEvent e) {
String string = new String();
string = textfield.getText();
textarea.append(string);
}
public static void main(String args[]) {
new Test();
}
}
위에서 '이부분'이라고 표시해 둔 곳이 문제죠...
textfield와 textarea의 변수선언이 문제가 된 프로그램이네요...
위 프로그램을 보시면
textfield, textarea를 instance variable로 선언해 놓고 생성자 모듈 내에서
또 textfield와 textarea 변수를 만들게 되면 변수의 유효 영역은 생성자 모듈 내에서만
가능하게 되겠지요..
그러니까 생성자 모듈내에서 새롭게 TextField, TextArea객체를 가리키는 같은 이름의 레퍼런스를 만들면
instance variable의 textarea나 textfield가 그 객체를 가리키는 것이 아니라 모듈내에서
새로 만든 textarea와 textfield 가 객체를 가리킨다는 것이지요..
그래서 textValueChanged 메소드에서 getText() 메소드가 동작을 하지 못하는 것이죠...
textValueChanged 모듈의 textfield와 textarea는 아무런 객체도 가리키고 있지 못한 상태니까요..
그러니까 프로그램의 생성자 모듈에 있는
TextField textfield = new TextField("hi");
TextArea textarea = new TextArea();
를 아래와 같이 바꾸면 되죠..
textfield = new TextField("hi");
textarea = new TextArea();