저는 배화여대 취업생입니다.
혼자서 자바를 다시 공부 할려니 너무 어렵습니다 ㅠㅠㅠㅠ
제가 지금 아주 쉬운 소스를 짰는데도 (사실 짰다기 보단 책에 잇는 것을 편집했습니다) 에러 한번에 몇일을 고민합니다.
요번에도 메뉴를 paint로 Graphics g로 짜고 하위 메뉴부분은 shell을 이용해서 버튼과 텍스트 박스를 구현했습니다.
액션을 이용해서 값을 넣어주는데 graphics를 이용한 부분을 하위에서 불러 오기가 되지 않습니다. 여기저기 알아보니깐 불러오기 함들거 라고 해서
다시 그부분을 shell의 label을 이용해서 짰습니다. 그리고 paint는 사용하되 graphics를 사용하는 곳을 없앴습니다.
그런데 지금은 keynotify 먹히지를 않습니
class DBClass extends Card implements ActionListener
{
public static final int MODE_MENU = 0;
public static final int MODE_ADD =1;
public static final int MODE_FIND =2;
public static final int MODE_MODIFY =3;
public static final int MODE_DELETE=4;
ShellComponent shell;
FormComponent base_frm;
FormComponent input_frm;
FormComponent btn_frm;
LabelComponent name_label;
LabelComponent home_label;
LabelComponent hp_label;
LabelComponent tel_memo;
LabelComponent di_memo;
LabelComponent old_label;
LabelComponent new_label;
TextFieldComponent old_name;
TextFieldComponent new_name;
TextFieldComponent text_home;
TextFieldComponent text_hp;
TextBoxComponent name_text;
TextBoxComponent home_text;
TextBoxComponent hp_text;
ButtonComponent sav_btn;
ButtonComponent sch_btn;
ButtonComponent view_btn;
ButtonComponent for_btn;
ButtonComponent new_btn;
ButtonComponent rename_btn;
ButtonComponent del_btn;
ButtonComponent del_ok_btn;
ButtonComponent re_ok_btn;
DialogComponent dialog;
ListComponent list;
int state;
public DBClass()
{
state = MODE_MENU;
}
public void paint(Graphics g)
{
switch (state)
{
case MODE_MENU:
StartMenu(g);
break;
case MODE_ADD:
AddDataMenu();
break;
case MODE_FIND:
FindDataMenu();
break;
case MODE_MODIFY:
ModifyDataMenu();
break;
case MODE_DELETE:
DeleteDataMenu();
break;
}
}
public boolean keyNotify(int type, int key)
{
switch(key)
{
case EventQueue.KEY_NUM1:
state = MODE_ADD;
break;
case EventQueue.KEY_NUM2:
state = MODE_FIND;
break;
case EventQueue.KEY_NUM3:
state = MODE_MODIFY;
break;
case EventQueue.KEY_NUM4:
state = MODE_DELETE;
break;
}
repaint();
return true;
}
public void StartMenu(Graphics g)
{
Image img = null;
Font font;
g.setColor(0x00A0F3);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0xffffff);
g.fillRect(3,3,getWidth()-6,getHeight()-6);
try
{
img = Image.createImage("title.gif");
}catch(Exception e){}
g.drawImage(img,10,4,g.LEFT);
font = Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD,Font.SIZE_SMALL);
g.setFont(font);
g.setColor(0x317194);
g.drawString("1.새주소추가" , 15, 80, g.LEFT);
g.drawString("2.기존주소검색" , 15, 100, g.LEFT);
g.drawString("3.기존주소수정" , 15, 120, g.LEFT);
g.drawString("4.기존주소삭제" , 15, 140, g.LEFT);
==================================================================
class DBClass extends Card implements ActionListener
{
public static final int MODE_MENU = 0;
public static final int MODE_ADD =1;
public static final int MODE_FIND =2;
public static final int MODE_MODIFY =3;
public static final int MODE_DELETE=4;
ShellComponent shell;
FormComponent base_frm;
FormComponent input_frm;
FormComponent btn_frm;
LabelComponent name_label;
LabelComponent home_label;
LabelComponent hp_label;
LabelComponent tel_memo;
LabelComponent di_memo;
LabelComponent old_label;
LabelComponent new_label;
LabelComponent im;
LabelComponent add;
LabelComponent find;
LabelComponent modify;
LabelComponent delete;
TextFieldComponent old_name;
TextFieldComponent new_name;
TextFieldComponent text_home;
TextFieldComponent text_hp;
TextBoxComponent name_text;
TextBoxComponent home_text;
TextBoxComponent hp_text;
ButtonComponent sav_btn;
ButtonComponent sch_btn;
ButtonComponent view_btn;
ButtonComponent for_btn;
ButtonComponent new_btn;
ButtonComponent rename_btn;
ButtonComponent del_btn;
ButtonComponent del_ok_btn;
ButtonComponent re_ok_btn;
DialogComponent dialog;
ListComponent list;
int state;
public DBClass()
{
state = MODE_MENU;
}
public void paint(Graphics g)
{
switch (state)
{
case MODE_MENU:
StartMenu();
break;
case MODE_ADD:
AddDataMenu();
break;
case MODE_FIND:
FindDataMenu();
break;
case MODE_MODIFY:
ModifyDataMenu();
break;
case MODE_DELETE:
DeleteDataMenu();
break;
}
}
public void StartMenu()
{
shell = new ShellComponent();
base_frm = new FormComponent();
input_frm = new FormComponent();
list_set();
input_frm.addComponent(im);
input_frm.addComponent(add);
input_frm.setGab(10);
base_frm.addComponent(input_frm);
base_frm.addComponent(find);
base_frm.addComponent(modify);
base_frm.addComponent(delete);
shell.addComponent(base_frm);
shell.show();
}
public boolean keyNotify(int type, int key)
{
if(state == MODE_MENU && type == EventQueue.KEY_PRESSED)
{
switch(key)
{
case EventQueue.KEY_NUM1:
state = MODE_ADD;
break;
case EventQueue.KEY_NUM2:
state = MODE_FIND;
break;
case EventQueue.KEY_NUM3:
state = MODE_MODIFY;
break;
case EventQueue.KEY_NUM4:
state = MODE_DELETE;
break;
}
repaint();
}
return true;
}
protected void list_set()
{
shell = new ShellComponent();
base_frm = new FormComponent();
add = new LabelComponent();
find = new LabelComponent();
modify = new LabelComponent();
delete = new LabelComponent();
im = new LabelComponent();
try
{
Image img = Image.createImage("title.gif");
im.setImage(img);
}catch(Exception e){}
add.setLabel(" 1. 새주소추가");
find.setLabel(" 2. 기존주소검색");
modify.setLabel(" 3. 기존주소수정");
delete.setLabel(" 4. 기존주소삭제");
}
위의 프로그래을 밑에 프로그램으로 고쳤다면
프로그램이 실행되고 dbclass가 불러와서 state가 메뉴를 가르키게 되고 paint 로 넘어가 startmenu를 부르게 됩니다. list_set의 label 4개와 그림을 불러와서 shell.show로 보며지는데
보여지고나서는 아무키도 먹지 않습니다.
제가 무엇을 놓쳤는지 모르겠습니다.
start메뉴에서 keynotify를 불러줘야 하는것일까라고 생각해봣지만
그렇다면 key값을 넣어줘야하는데 그건 사용자의 임의대로 넣는것이라서 그렇도 안되고 , 몇일을 찾다가 도저히 안되겠어서 질문합니다
무엇이 잘못되었는지 알고 싶습니다 ㅠㅠㅠ
전체 소스를 같이 올려주세요.