Popup soll nur im Editor geöffnet werden!
Peter
- java
Hallo Java-Genies,
ich hab mir einen kleinen Editor mit einen kleinen Menüleiste geschrieben. Nun soll, wenn im Editor (und nur im Editor) mit der rechten Maustaste geklicked wird, ein Popupfenster sich öffnen.
Jedoch funktioniert das ganze nicht. Hier mein Quellcode:
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);
getContentPane().addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
doPopup(e);
}
public void mouseReleased(MouseEvent e){
doPopup(e);
}
public void mouseClicked(MouseEvent e){
doPopup(e);
}
private void doPopup(MouseEvent e){
if(e.isPopupTrigger()) 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);
}
}
Danke für eure Hilfe!
Grüße Peter
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