MouseListener klicks begrenzen

Husamoli

Mitglied
Hallo ich habe einen MouseListener gemacht der allerdings nur bei Doppelklick funktioniert ich möchte aber das er bei einem normalen Klick die Klicks zählt und dann das ausführt was ich möchte mit den anderen Methoden von MouseListenern
  • mouseClicked(MouseEvent e): Wird ausgeführt, wenn die Maus vom Benutzer geklickt wurde.
  • mouseEntered(MouseEvent e): Wird ausgeführt, wenn die Maus eine Komponente betritt.
  • mouseExited(MouseEvent e): Wird ausgeführt, wenn die Maus eine Komponente verlässt.
  • mousePressed(MouseEvent e): Wird ausgeführt, wenn eine Maustaste über einer Komponente gedrückt wurde.
habe ich es auch schon probiert allerdings wird trotzdem nur auf Doppelklick reagiert kann mir wer helfen?
Java:
public void mouseReleased(MouseEvent e) {
                    if (schiffesetzen == 0) {
                    ((Component) e.getSource()).setBackground(Color.BLACK);
                    schiffesetzen = 3;
                    }
                     else  {
                        JOptionPane.showMessageDialog(Spielfeld, "Sie haben alle Schiffe gesetzt los gehts!");
                        setVisible(false);



das ist der Code der auf dieser GUI reagieren soll...
Java:
package Schiffeversenken;

import java.awt.Color;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.rmi.Remote;
import java.rmi.RemoteException;

import javax.security.auth.callback.Callback;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

import Schiffe.GUI.PrintField;

public class GUI extends JFrame implements ActionListener ,MouseListener{

    private static final long serialVersionUID = 1L;
    public static Spieler[] Spieler = new Spieler[1];
    private JLabel Tietel;
    private JLabel Name;
    private JLabel Name2;

    private JButton Start1;
    private JButton Beenden;
    static JTextField textName;
    static JTextField textName2;

    public GUI() {

        this.setTitle("Schiffe versenken" + Spieler);
        this.Tietel = new JLabel("Willkommen zum Schiffeversenken");  
        this.Name = new JLabel("Name 1");
        this.Name2 = new JLabel("Name 2");


        this.Start1 = new JButton("Start");
        this.Beenden = new JButton("Beenden");
        this.textName = new JTextField();
        this.textName2 = new JTextField();
        new JTextField();
        this.setVisible(true);

        Beenden.addActionListener(this);
        add(Beenden);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(500, 500);
        this.setLayout(new GridBagLayout());
        this.ordneAn();
        this.Listenererstellen();
        this.setVisible(true);

    }

    public void ordneAn() {
        GridBagConstraints c = new GridBagConstraints();
        c.fill = GridBagConstraints.HORIZONTAL;
        c.insets = new Insets(4, 4, 4, 4);

        c.gridx = 0;
        c.gridy = 0;
        c.gridwidth = 0;

        this.getContentPane().add(Tietel, c);

        c.gridx = 0;
        c.gridy = 1;

        this.getContentPane().add(Name, c);

        c.gridx = 0;
        c.gridy = 2;
        c.gridwidth = 3;

        this.getContentPane().add(textName, c);

        c.gridx = 2;
        c.gridy = 1;

        this.getContentPane().add(Name2, c);

        c.gridx = 2;
        c.gridy = 2;
        c.gridwidth = 2;

        this.getContentPane().add(textName2, c);

        c.gridx = 0;
        c.gridy = 3;
        c.gridwidth = 1;

        this.getContentPane().add(Start1, c);

        c.gridx = 3;
        c.gridy = 3;
        c.gridwidth = 1;

        this.getContentPane().add(Beenden, c);

    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        Object object = ae.getSource();
        if (object.equals(Beenden)) {
            System.exit(0);
        }

    }

    public void Listenererstellen() {
        Start1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Spielfeld feld1 = new Spielfeld();
                Spielfeld feld2 = new Spielfeld("baba");
                Schiff schiffe = new Schiff();
                schiffe.buttonsFürSchiffeSetzen();

            }
        });
    }

   
    public void mouseClicked(MouseEvent arg0) {
        // TODO Automatisch generierter Methodenstub
       
    }

    @Override
    public void mouseEntered(MouseEvent arg0) {
        // TODO Automatisch generierter Methodenstub
       
    }

    @Override
    public void mouseExited(MouseEvent arg0) {
        // TODO Automatisch generierter Methodenstub
       
    }

    @Override
    public void mousePressed(MouseEvent arg0) {
        // TODO Automatisch generierter Methodenstub
       
    }

    @Override
    public void mouseReleased(MouseEvent arg0) {
        // TODO Automatisch generierter Methodenstub
       
    }

}
 
So richtig versteh ich deine Frage noch nicht. mouseEntered und mouseExited haben doch gar nichts mit einem Mausklick zu tun?
Und wenn du in mousePressed / mouseClicked zwischen Doppel - und Einfachklick unterscheiden dann mach eine if-Abfrage rein
Java:
@Override
public void mousePressed(MouseEvent e) {
     if(e.getClickCount() == 2) {
          // doppelklick
     } else if(e.getClickCount() == 1) {
         // einfachklick
     }
}
 
Danke für deine Antwort allerdings funktioniert es immernoch nicht so wie ich vorhabe...
Java:
public void mouseClicked(MouseEvent e) {
                     if(e.getClickCount() >= 6) {
                        
                         JOptionPane.showMessageDialog(Spielfeld, "Sie haben alle Schiffe gesetzt los gehts!");
                        
                        
                          // doppelklick
                     } else if(e.getClickCount() >= 2) {
                         JOptionPane.showMessageDialog(Spielfeld, "Sie haben alle Schiffe gesetzt los gehts!");
                         // einfachklick


so hab ich das jetzt implementiert mein Ziel ist es bei 6 Maus Klicks auf dem GUI Feld Sie habe alle Schiffe gesetzt auszugeben aber ich kann beliebig viele Felder anklicken ausser ich mache Doppelklick dann kommt die Dialog Naricht
 
Also nur das du es richtig verstehst: getClickCount() liefert die Anzahl der Mausklicks für dieses Event.
Wenn du einen Doppelklick detektieren möchtest musst du mit getClickCount() arbeiten. Willst du die Anzahl der platzierten Schiffe, also die Anzahl der Mausklicks, haben musst du Attribut anlegen, welches hochgezählt wird sobald die Methode aufgerufen wird.
 

Zurück
Oben