2013-05-03 3 views
0

이것은 내 코드입니다. 마우스의 오른쪽 버튼을 클릭하고 test1을 선택하면 코드가 JLabel을 만들고 그 위치에 놓습니다.직렬화 된 방식으로 생성 된 개체에 액세스하는 방법은 무엇입니까?

public class Test extends JFrame { 
     int x; 
     int y; 
     JPopupMenu menu = new JPopupMenu("Popup"); 

     class MyLabel extends JLabel { 
      public MyLabel(String text) { 
      super(text); 
      addMouseListener(new PopupTriggerListener()); 
     } 

class PopupTriggerListener extends MouseAdapter { 
    public void mousePressed(MouseEvent ev) { 
    if (ev.isPopupTrigger()) { 
     menu.show(ev.getComponent(), ev.getX(), ev.getY()); 
     x = ev.getX(); 
     y = ev.getY(); 
    } 
    } 

    public void mouseReleased(MouseEvent ev) { 
    if (ev.isPopupTrigger()) { 
     menu.show(ev.getComponent(), ev.getX(), ev.getY()); 
     x = ev.getX(); 
     y = ev.getY(); 
    } 
    } 

      public void mouseClicked(MouseEvent ev) { 
      } 
     } 
     } 

    JLabel label = new MyLabel("right-click"); 

    public Test() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JMenuItem item = new JMenuItem("Test1"); 
     item.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 

      System.out.println("Menu item Test1"); 
      JLabel newLabel = new JLabel("test"); 
      label.add(newLabel); 
      newLabel.setBounds(x, y, 40, 10); 
        } 
       }); 
     menu.add(item); 

     item = new JMenuItem("Test2"); 
     item.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
      System.out.println("Menu item Test2"); 
      } 
     }); 
     menu.add(item); 

     getContentPane().add(label); 
     pack(); 
     setSize(300, 100); 
     } 

     public static void main(String[] args) { 
     new Test().setVisible(true); 
     } 

하지만 나중에 텍스트를 수정하려면 해당 레이블에 액세스 할 수있는 방법을 모르겠습니다. 사용자가 오른쪽 버튼을 클릭하고 "삭제"를 선택하면 생성 된 해당 레이블을 삭제할 수 있지만 actionPerformed 코드에서 netbeans는 다른 actionListener를 추가 할 수 없습니다. 누구나 나를 도울 수 있습니까? 감사합니다

답변

0

모든 변경 사항은 Test 생성자에 있습니다

public Test() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    // Change the name here from "Test1" to whatever you want 
    JMenuItem item = new JMenuItem("Test1"); 
    item.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("Menu item Test1"); 
      JLabel newLabel = new JLabel("test"); 
      label.add(newLabel); 
      newLabel.setBounds(x, y, 40, 10); 
     } 
    }); 
    menu.add(item); 

    // Change the name here from "Test2" to whatever you want 
    item = new JMenuItem("Test2"); 
    item.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("Menu item Test2"); 
     } 
    }); 
    menu.add(item); 

    // Implement a "Delete" option 
    item = new JMenuItem("Delete"); 
    item.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("Menu item Delete"); 
      // Get the component at the mouse coordinates 
      Component comp = label.getComponentAt(x, y); 
      // If the component is a JLabel, delete it 
      if (comp instanceof JLabel) { 
       label.remove(comp); 
       // Repaint the screen to remove the label 
       repaint(); 
      } 
     } 
    }); 
    menu.add(item); 

    getContentPane().add(label); 
    pack(); 
    setSize(300, 100); 
} 
+0

확인, 즉 잘 작동! 하지만 내 목적을 위해 나는 시간 동안 변경할 수있는 메뉴를 만들어야합니다. 오른쪽 버튼을 클릭 할 때마다 만들어지는 메뉴를 만들 수 있습니까? 노력하고 있어도 작동하지 않아 ... 도와 줄 수있어? 고마워요 – user2312976

+0

오른쪽 버튼을 클릭 할 때마다 메뉴를 변경할 수는 있지만 메뉴에서 무엇을 변경 하시겠습니까? – isaach1000