Announcement

Collapse
No announcement yet.

Mouse-Menü erstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mouse-Menü erstellen

    Hallo,

    ich habe einen JTable und möchte dass man wenn man mit der rechten Maustaste auf eine der Zeilen klickt an dieser Stelle ein Menü geöffnet wird. Ich könnte jetzt einen JFrame mit einigen Buttons drauf anzeigen, was mich aber interessiert ist, ob es nicht eine spezielle Klasse, bzw. ein Objekt gibt, mit welchem sich so etwas realisieren lässt.
    Vielen Dank,

    Flo

  • #2
    <HTML>
    Das Zauberwort heisst PopupMenu <br>
    unten ein vollstandiger Frame1.java Quellcode <br><br>

    viel Spass bei der Probiererei wünscht<br>
    Roland<br><br>
    <PRE>
    package test.popup;

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

    /**
    * <p>Title: pppp</p>
    * <p>Description: </p>
    * <p>Copyright: Copyright (c) 2000</p>
    * <p>Company: BLVA: Gruppe II5</p>
    * @author Etterer Roland
    * @version 1.0
    */

    public class Frame1 extends JFrame {
    private JPanel contentPane;
    private GridBagLayout gridBagLayout1 = new GridBagLayout();

    //Das Textfeld bei dem durch rechte Maustaste das PopupMenu aufgehen soll
    private JTextField jTextField1 = new JTextField();

    //Das Popupmenu mit seinen MenuItems
    private JPopupMenu jPopupMenu1 = new JPopupMenu();
    private JMenuItem jMenuItem1 = new JMenuItem();
    private JMenuItem jMenuItem2 = new JMenuItem();
    private JMenuItem jMenuItem3 = new JMenuItem();

    //Den Frame konstruieren
    public Frame1() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
    jbInit();
    }
    catch(Exception e) {
    e.printStackTrace();
    }
    }
    //Initialisierung der Komponenten
    private void jbInit() throws Exception {

    contentPane = (JPanel) this.getContentPane();
    jTextField1.setBorder(BorderFactory.createLineBord er(Color.black));

    contentPane.setLayout(gridBagLayout1);
    this.setSize(new Dimension(400, 300));
    this.setTitle("Frame-Titel");
    contentPane.add(jTextField1, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0
    ,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(64, 43, 257, 89), 182, 13));

    // auf dieses Textfield soll auf rechten Maustastendruck das PopupMenu1 anzeigen
    // deshalb braucht es einen Mouslistener der die rechte Moustaste abfrägt
    jTextField1.setText("jTextField1");
    jTextField1.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
    jTextField1_mouseClicked(e);
    }
    });

    // naturlich braucht jedes MenuItem einen Listener;
    // ich bevorzuge Action Command für die Items zu vergeben, s.unten
    // dadurch kann ich für jeden Item Listener die gleiche Funktion
    // jMenuItem_actionPerformed(e) aufrufen
    // Aber Achtung die Action commands sollten eindeutig sein !!
    jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(ActionEvent e) {
    jMenuItem_actionPerformed(e);
    }
    });
    jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(ActionEvent e) {
    jMenuItem_actionPerformed(e);
    }
    });
    jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(ActionEvent e) {
    jMenuItem_actionPerformed(e);
    }
    });

    // Das Menu zusammenstellen
    jMenuItem1.setText("sichern");
    jMenuItem2.setText("holen");
    jMenuItem3.setText("arbeiten");

    // ich bevozuge mit Action Commands zu arbeiten,da man dann nur eine Methode
    // für alle MenuitemListener aufrufen muß in denen mann den Action command abfrägt
    jMenuItem1.setActionCommand("save");
    jMenuItem2.setActionCommand("get");
    jMenuItem3.setActionCommand("work");

    // und in sich addieren
    jPopupMenu1.add(jMenuItem1);
    jPopupMenu1.add(jMenuItem2);
    jPopupMenu1.addSeparator();
    jPopupMenu1.add(jMenuItem3);

    } // end jbInit()

    // Mouse Listener abfragen auf jTextField1

    void jTextField1_mouseClicked(MouseEvent e) {

    // Die entscheidende Zeile MouseEvent.BUTTON3_MASK bzw. e.BUTTON3_MASK
    // ist der Int wert für die Rechte MouseTaste
    if(e.getModifiers()==e.BUTTON3_MASK){

    // dann wird das PopupMenu1 angezeigt an dem ort X,Y
    // relativzu der Komponente an die das Popupmenu gehängt wird
    // hier an das jTe

    Comment


    • #3
      <HTML>
      hier der rest ab end jbInit()
      <PRE>
      // Mouse Listener abfragen auf jTextField1

      void jTextField1_mouseClicked(MouseEvent e) {

      // Die entscheidende Zeile MouseEvent.BUTTON3_MASK bzw. e.BUTTON3_MASK
      // ist der Int wert für die Rechte MouseTaste
      if(e.getModifiers()==e.BUTTON3_MASK){

      // dann wird das PopupMenu1 angezeigt an dem ort X,Y
      // relativzu der Komponente an die das Popupmenu gehängt wird
      // hier an das jTextGreatField1, Popupmenu geht an der linken
      // oberen Ecke von übergebener Componente auf
      jPopupMenu1.show(jTextField1,0,0);

      // eigentlich klar, dass das Gleiche Popupmenu auch von einer anderen
      // Componente durch entsprechende Listener angezeigt werden kann

      System.out.println("Rechte MouseTaste gedrückt");
      }

      }

      // Hier die Methode die die Menüauswahl abfrägt

      void jMenuItem_actionPerformed(ActionEvent e) {
      // mache irgend etwas in abhängigkeit des gewählten Menues
      if(e.getActionCommand().compareTo("save")==0){
      System.out.println("sichern wurde (ist) gewählt");
      jTextField1.setText("sichern wurde gewählt");
      }
      else if(e.getActionCommand().compareTo("get")==0){
      System.out.println("holen wurde (ist) gewählt");
      jTextField1.setText("holen wurde (ist) gewählt");
      }
      else if(e.getActionCommand().compareTo("work")==0){
      System.out.println("arbeiten wurde (ist) gewählt");
      jTextField1.setText("arbeiten wurde (ist) gewählt");
      }
      else{
      System.out.println("Nothing wurde (ist) gewählt");
      jTextField1.setText("Nothing wurde (ist) gewählt");
      }

      }

      //Überschrieben, so dass eine Beendigung beim Schließen des Fensters möglich ist.
      protected void processWindowEvent(WindowEvent e) {
      super.processWindowEvent(e);
      if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
      }
      }

      }
      </PRE>
      </HTML&gt

      Comment


      • #4
        Vielen Dank,

        werde ich gleich mal ausprobieren...ist ja Dank ausführlicher Kommentierung gut zu verstehen...merci,

        Fl

        Comment


        • #5
          Würd mich freuen, wenn Du mir mitteilst wenn es geklappt hat !
          Gruß Rol

          Comment

          Working...
          X