Daniel Thoma: Popup soll nur im Editor geöffnet werden!

Beitrag lesen

Hallo Peter

Hier die verbesserte Version:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class HalloSwing extends JFrame{
  public HalloSwing(){
    super("Editor-Test");

ActionListener listenerExit = new ActionListener(){
      public void actionPerformed(ActionEvent e){
   System.exit(0);
      }
    };

JMenuBar menuBar = new JMenuBar();
    setJMenuBar(menuBar);
    
    JMenu menu = new JMenu("Programm");
    menu.setMnemonic('p');
    
    JMenuItem itemExit = new JMenuItem("Beenden");
    itemExit.setMnemonic('b');
    itemExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, Event.ALT_MASK));
    itemExit.addActionListener(listenerExit);

menu.add(itemExit);
    menuBar.add(menu);

JTextPane textEditor = new JTextPane();
    textEditor.setText("Hallo Welt!");
    getContentPane().add(textEditor);

final JPopupMenu popup = new JPopupMenu();

JMenuItem itemClick = new JMenuItem("Klick mich!");
    itemClick.setMnemonic('k');
    itemClick.addActionListener(listenerExit);
    popup.add(itemClick);

itemExit = new JMenuItem("Beenden");
    itemExit.setMnemonic('b');
    itemExit.addActionListener(listenerExit);
    popup.add(itemExit);

//Du willst den Popup doch nur im editor, warum hast du ihn dann zum ContentPane hinzugefügt?
//Konnte natürlich nicht klappen, weil der editor den ganzen ContentPane ausfüllt und die mouseevents diesen so nicht erreichen.
    textEditor.addMouseListener(new MouseAdapter(){

//Wenn du nur mouseclicked abfängst langt das.
       public void mouseClicked(MouseEvent e){
   doPopup(e);
      }

private void doPopup(MouseEvent e){
//Das ist der wichtigste punkt. Hier wird abgefragt, welche mausetaste gedrückt wurde. Das tut auch bei 2-Tastenmäusen so.
if(e.getModifiers() == MouseEvent.BUTTON3_MASK)
{
popup.show(e.getComponent(), e.getX(), e.getY());
}

}
    });
  }
  
  public static void main(String args[]){
    JFrame frame = new HalloSwing();
    frame.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e){
        System.exit(0);
      }
    });    
    frame.pack();
    frame.setSize(700,500);
    frame.setVisible(true);
  }
}

Tschüs

Daniel