2013-05-03 35 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 2013-05-04 09:55:59

+0

每次單擊右鍵都可以更改菜單,但是您想在菜單中更改什麼? – isaach1000 2013-05-05 05:54:44

相關問題