Krain Geschrieben 6. Dezember 2002 Geschrieben 6. Dezember 2002 Hallo zusammen, folgendes Problem: Ich habe im folgenden Code die Stelle rot markiert auf die es ankommt! Und zwar will ich auf Rechtsklick mit der Maus in einem Panel ein Popup erscheinen lassen. Allerdings steht bei mir der PopupTrigger für Rechtsklick auf false. Jetzt die Frage: Wie krieg ich es hin, daß bei Rechtsklick das Popup erscheint, bzw. wie kann ich die Tasten der Maus abfragen? im Voraus schon vielen Dank! ciao Krain import java.awt.*; import javax.swing.*; import java.awt.event.*; public class MenuDemo { public static void main(String[] args) { JFrame frame=new JFrame("Menü - Demo"); JPanel panel=new JPanel(); frame.getContentPane().add(panel,"Center"); ActionListener listener=new MenuItemActionListener(panel); JMenu file=new JMenu("Datei"); file.setMnemonic('D'); file.add(menuItem("Neu",listener,"new",'N',KeyEvent.VK_N)); file.add(menuItem("Öffnen...",listener,"open",'O',KeyEvent.VK_O)); file.add(menuItem("Speichern",listener,"save",'S',KeyEvent.VK_S)); file.add(menuItem("Speichern unter",listener,"saveas",'U',KeyEvent.VK_U)); JMenu edit=new JMenu("Bearbeiten"); edit.setMnemonic('B'); edit.add(menuItem("Ausschneiden",listener,"cut",0,KeyEvent.VK_X)); edit.add(menuItem("Kopieren",listener,"copy",'K',KeyEvent.VK_C)); edit.add(menuItem("Einfügen",listener,"paste",0,KeyEvent.VK_Y)); JMenuBar menu=new JMenuBar(); menu.add(file); menu.add(edit); frame.setJMenuBar(menu); final JPopupMenu popup=new JPopupMenu(); popup.add(menuItem("Öffnen...",listener,"open",0,0)); popup.addSeparator(); JMenu colors=new JMenu("Farben"); popup.add(colors); ButtonGroup colorgroup=new ButtonGroup(); colors.add(radioItem("Rot",listener,"color(red)",colorgroup)); colors.add(radioItem("Grün",listener,"color(green)",colorgroup)); colors.add(radioItem("Blau",listener,"color(blue)",colorgroup)); [COLOR=red] panel.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if(e.isPopupTrigger()) popup.show((Component)e.getSource(),e.getX()+10,e.getY()+10); } });[/COLOR] frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400,400); frame.setVisible(true); } public static JMenuItem menuItem(String name, ActionListener listener, String cmd,int mnemonic,int acc) { JMenuItem item=new JMenuItem(name); item.addActionListener(listener); item.setActionCommand(cmd); if(mnemonic!=0) item.setMnemonic((char) mnemonic); if(acc!=0) item.setAccelerator(KeyStroke.getKeyStroke(acc,Event.CTRL_MASK)); return item; } public static JMenuItem radioItem(String label, ActionListener listener, String cmd,ButtonGroup mutExGroup) { JMenuItem item=new JMenuItem(label); item.addActionListener(listener); item.setActionCommand(cmd); mutExGroup.add(item); return item; } public static class MenuItemActionListener implements ActionListener { private Component parent; public MenuItemActionListener(Component parent) { this.parent=parent; } public void actionPerformed(ActionEvent e) { JMenuItem item=(JMenuItem) e.getSource(); String cmd=item.getActionCommand(); JOptionPane.showMessageDialog(parent,cmd + " wurde ausgewählt!"); } } } Zitieren
Jaraz Geschrieben 6. Dezember 2002 Geschrieben 6. Dezember 2002 Hi, erst mal möchte ich dir sagen, dass du anscheinend den Sinn einer objektorientierten Sprache nicht verstanden hast. So wie programmierst, könnte man auch ne Skriptsprache nehmen. Zum Problem: ob es sich bei der Maustaste um die rechte handelt, kannst du mit: ---------------- SwingUtilities static boolean isRightMouseButton(MouseEvent anEvent) Returns true if the mouse event specifies the right mouse button. ---------------- herausfinden. Gruß Jaraz Zitieren
Krain Geschrieben 6. Dezember 2002 Autor Geschrieben 6. Dezember 2002 Ich übe ja noch! Das Beispiel ist aus dem Buch "Java Foundation Classes in a Nutshell", welches mir als sehr gut empfohlen worden ist! Dieses Beispiel hat aber eben bei mir mit rechter Maustaste nicht funktioniert - ich werde es jetzt mal mit Deiner Abfrage versuchen! Danke Zitieren
Jaraz Geschrieben 6. Dezember 2002 Geschrieben 6. Dezember 2002 Achso, und ich dachte das sollte jetzt der Anfang eines Programms werden. Aber als Beispiel kann man es so gerade noch vertreten. Wie du dann ein Popup anzeigt, musst du dir selber suchen. Mein Beitrag war nur für das erkennen, um welche Maustaste es sich handelt. Gruß Jaraz Zitieren
Krain Geschrieben 6. Dezember 2002 Autor Geschrieben 6. Dezember 2002 Wie könnte ich denn das Programm objektorientiert gestalten? Die Klassen auslagern? Oder was meinst Du? Vielleicht kann ich mir daraus ja doch noch was brauchbares bauen!? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.