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