JBuilder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
J빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

J빌더 Q&A
[687] MouseListener 질문입니다.
이세왕 [] 3195 읽음    2005-12-09 15:50
메신저를 만드려고하는데요

우선 틀부터 만드려구요

그래서 Swing을 이용해서 Jtree를 만들었구요

마우스 이벤트로 그노드를 클릭하면 노드에 적혀있는 이름이 접속되어있게 만들었습니다.

근데 마우스 왼쪽버튼으로 하면 잘되는데 오른쪽버튼은 왼쪽버튼으로 선택하고 난다음 오른쪽버튼을

사용해야 이벤트가 발생하고 그렇게 하지않으면 전에 있던 노드의 값이 나와요 ㅠ.ㅠ

지금 저희가 사용하고있는 네이트온이나 MSN같은것을보면 오른쪽 버튼을 눌렀을경우

그 노드가 선택되고 오른쪽버튼을 누른다음상태에 팝업창이 뜨는것을 알수있습니다.

이렇게 만들려고 하는데요 조금만 도와주세요~!!ㅠ.ㅠ

즉 제 코딩은 이렇습니다.

import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;

public class TreeTest5 extends JFrame implements ActionListener//, MouseListener
{
    JTree tree;
    JMenuBar mb;
    JMenu filemenu,gamemenu;
    JMenuItem conItem,exitItem,winItem,cardItem,addItem;
    JTextArea jta;
    JTextField jtf;
    JScrollPane jsp,js;
    DefaultMutableTreeNode node,hong,shim,fri;
    DefaultTreeModel treeModel;
    Vector vec;
   
    String name,name2;
   
    public void treefun()
    {
       
        for (int i=0; i<vec.size();i++)
        {
            String na = (String)vec.elementAt(i);
            vec.removeElementAt(i);
            fri = new DefaultMutableTreeNode(na);
            node.add(fri);
        }
       
        treeModel.reload();
        getContentPane().add("North",js);
        getContentPane().add("Center",jsp);
        getContentPane().add("South",jtf);
       
        setSize(500,500);
        setVisible(true);
    }
   
    public TreeTest5()
    {
        vec=new Vector();
        node=new DefaultMutableTreeNode("친구등록");
        hong=new DefaultMutableTreeNode("홍길동");
        shim=new DefaultMutableTreeNode("심청");
       
        jta=new JTextArea();
        jsp=new JScrollPane(jta);
        jtf=new JTextField();
       
        tree = new JTree(node);
        treeModel = (DefaultTreeModel)tree.getModel();
        js = new JScrollPane(tree);
       
        node.add(hong);
        node.add(shim);
        name=JOptionPane.showInputDialog(this,"대화명을 입력하시오");
        setTitle(name+"님이 접속 되었 습니다.");
       
        mb=new JMenuBar();
        filemenu=new JMenu("File");
        gamemenu=new JMenu("Game");
        conItem=new JMenuItem("접속");
        addItem=new JMenuItem("친구등록하기");
        exitItem=new JMenuItem("해제");
        winItem=new JMenuItem("지뢰찾기");
        cardItem=new JMenuItem("카드놀이");
       
        filemenu.add(conItem);
        filemenu.addSeparator();
        filemenu.add(addItem);
        filemenu.addSeparator();
        filemenu.add(exitItem);
       
        gamemenu.add(winItem);
        gamemenu.addSeparator();
        gamemenu.add(cardItem);
       
        mb.add(filemenu);
        mb.add(gamemenu);
        setJMenuBar(mb);
        /* 마우스 클릭 이벤트를 생성자에 무명클래스에 넣었어 ^^;
        여기 및에 부분인데... 안되네...ㅠ.ㅠ 함만 봐주삼~!! */
        tree.addMouseListener(new MouseAdapter(){
            public void mouseReleased(MouseEvent me)
            {
                //if ( SwingUtilities.isRightMouseButton( me ) )
                //if ( (me.getModifiers()&me.BUTTON3_MASK)!=0 )
                if(me.getModifiers() == me.BUTTON1_MASK)
                {
                   

                    DefaultMutableTreeNode selectedNode =
                        (DefaultMutableTreeNode) (tree.getLastSelectedPathComponent());//현재의 선택의 최초의 노드에 있는 마지막 파스콘포넨트를 돌려줍니다.
                   
                    Object name = (Object)selectedNode;
                   
                    if (name==null)
                    {
                        return;
                    }   
                    //JOptionPane.showMessageDialog(null,selectedNode+"님이 접속 되었 습니다.","경고",JOptionPane.WARNING_MESSAGE);
                    JOptionPane.showMessageDialog(null,name+"님이 접속 되었 습니다.","경고",JOptionPane.WARNING_MESSAGE);
                  
                   
                    //tree.clearSelection ();
                    }//if
               
            }}
        );
       
        addItem.addActionListener(this);
        conItem.addActionListener(this);
        exitItem.addActionListener(this);
        winItem.addActionListener(this);
        cardItem.addActionListener(this);
       
        jta.setEditable(false);
        jtf.requestFocus();       
        jtf.addActionListener(this);
        jta.setEditable(false);
        jtf.requestFocus();
       
        treefun();
    }
   
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==conItem)
        {
            name=JOptionPane.showInputDialog(this,"대화명을 입력하시오");
           
            if(name==null||name.trim().length()<1)
            {
                JOptionPane.showMessageDialog(null,"대화명을 입력하시오","경고",JOptionPane.WARNING_MESSAGE);
                return;
            }
            setTitle(name+"님이 접속 되었 습니다.");
        }
       
        else if(e.getSource()==addItem)
        {
            name2 = JOptionPane.showInputDialog(null,"등록할 이름을 입력하세요");
            vec.addElement(name2);
            treefun();
        }
        else if(e.getSource()==exitItem)
        {
            int anser=JOptionPane.showConfirmDialog(null,"종료할까요??","종료",JOptionPane.YES_NO_OPTION);
            if(anser==JOptionPane.YES_OPTION)
            {
                System.exit(0);
            }
        }
        else if(e.getSource()==winItem)
        {
            try{
                Runtime r=Runtime.getRuntime();
                r.exec("c:\\winnt\\System32\\winmine.exe");
            }catch(Exception ex){}
        }
        else if(e.getSource()==cardItem)
        {
            try{
                Runtime r=Runtime.getRuntime();
                r.exec("c:\\winnt\\System32\\sol.exe");
            }catch(Exception ex){}
        }
        String msg = jtf.getText();
        jta.append(name+" : "+msg+"\n" );
        jtf.setText("");
        jta.setEditable(false);
       
    }
    public static void main(String args[])
    {
        new TreeTest5();
       
    }
}


한번 봐주시면 고맙겠습니다. ^___^

+ -

관련 글 리스트
687 MouseListener 질문입니다. 이세왕 3195 2005/12/09
689     Re:MouseListener 질문입니다. 김정은 2007 2005/12/16
691         Re:Re:MouseListener 질문입니다. 이세왕 2137 2005/12/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.