java

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ java ] in KIDS
글 쓴 이(By): crystal (쑤쑤)
날 짜 (Date): 1997년12월23일(화) 02시06분51초 ROK
제 목(Title): Re: [질문] Popup Menu가 안되요.... 


Nutshell edition 2를 가지고 있지 않아 정확히는 모르겠지만
그 코드에서 만약 mouse listener 를 써서 isPopupTrigger()를 부르고 있다면
문제는 자바가 가지고있는 bug 에 있습니다.
JDK 1.1 나왔을때부터 발견된 bug 인데 1.1.5 까지도 않고쳐진 bug 이죠..
(1.2 에서 고쳐졌다는 기록을 찾아볼수도 없군요.)

다행인것은 비교적 간단한 치료법(?) 이 있다는점이죠.
mouse listener 를 쓰지 않고 대신 enableEvents 와 processMouseEvents 를 
override 하는 방법이 있습니다.

밑에 간단한 코드가 있으니 참고하시죠.  

[Java Developers' Connection 에서 퍼왔습니다]

                        import java.awt.*;
                        import java.applet.*;
                        import java.awt.event.*;

                        public class PopupMenuTest extends Applet implements 
ActionListener {

                    PopupMenu popup;

                    public void init() {        
                                MenuItem mi;

                        popup = new PopupMenu("Edit");

                                mi = new MenuItem("Cut");
                                mi.addActionListener(this);
                        popup.add(mi);

                                mi = new MenuItem("Copy");
                                mi.addActionListener(this);
                        popup.add(mi);

                        popup.addSeparator();

                                mi = new MenuItem("Paste");
                                mi.addActionListener(this);
                        popup.add(mi);

                        add(popup); // add popup menu to applet
                               
                                enableEvents(AWTEvent.MOUSE_EVENT_MASK); 

                        resize(200, 200);
                            }

                    public void processMouseEvent(MouseEvent e) {

                        if (e.isPopupTrigger()) { 
                            popup.show(e.getComponent(), e.getX(), e.getY());
                        }
                        super.processMouseEvent(e);
                            }

                            public void actionPerformed(ActionEvent e) {
                        String command = e.getActionCommand();

                                if (command.equals("Cut")) {
                            // perform cut operation
                                } else if (command.equals("Copy")) {
                                    // perform copy operation
                                } else if (command.equals("Paste")) {
                                    // perform paste operation
                                }
                            }
                        }
 
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.