Unterscheidung Mausklicks

Dan1el

Mitglied
Guten Abend,

für unseren Abiball muss ich ein Programm schreiben mit dem wir ein Fussballquiz machen wollen.
Es treten Lehrer gegen Schüler an und da sollen die Lehrer natürlich immer die schweren Fragen bekommen ;)

Nun möchte ich, dass wenn ich Rechtsklick auf einen Button mache, die leichte Frage für die Schüler kommt und wenn ich Linksklick auf einen Button mache, soll natürlich die schwere Frage für die Lehrer erscheinen.

Leider hab ich keine Ahnung wie ich zwischen Rechts- und Linksklick unterscheiden kann :(
Alles andere werde ich selbst hinbekommen.

Hoffe ihr könnt mir da auf die Schnelle weiterhelfen.
Im Moment steht nur das grafische Gerüst.

Das Programm sieht man natürlich live über den Beamer.
 
Zuletzt bearbeitet:

Dan1el

Mitglied
Ja auf die Hilfsmethoden bin ich auch schon gestoßen, allerdings kann ich damit wenig anfangen da mir das Wissen fehlt.

Wie müssten denn mein Eventhandling aussehen, wenn ich:

10 Buttons habe = 20 Fragen (10 Schülerfragen + 10 Lehrerfragen)


Wenn ich also auf einen Button klicke muss geschaut werden welcher Button geklickt und mit welcher Maustaste er betätigt wurde. Kannst du mir da weiterhelfen.
 

Illuvatar

Top Contributor
Wenn du mit Buttons wirkliche Buttons (d.h. javax.swing.JButton oder veraltet: java.awt.Button) meinst, dann gibt es da das Problem dass solche Buttons ja eigentlich nur auf Linksklicks reagieren.
Bei einem Rechtsklick gibt es deshalb soweit ich weiß kein ActionEvent: statt dem ActionListener solltest du also einen MouseListener verwenden. Diese Methode ist dann die, die für dich relevant sein sollte. Und da kriegst du dann auch das MouseEvent mit den Methoden die ich oben geschrieben hab.

Das war jetzt noch mehr so ein Anstoß - falls dir das noch nicht genug hilft, einfach weiterfragen ;)
 

Dan1el

Mitglied
Wenn du mit Buttons wirkliche Buttons (d.h. javax.swing.JButton oder veraltet: java.awt.Button) meinst, dann gibt es da das Problem dass solche Buttons ja eigentlich nur auf Linksklicks reagieren.

Oh, das ist jetzt aber ein Problem...

Die "Maus-Methode" müsste dann so aussehen?
Java:
	public class MyMouseListener implements MouseListener
	{
		public void void mouseClicked(MouseEvent e)
		{	
		if(e.getSource()==**********)
	         
		}
	}
********** --> Der Maus "Knopf"?? (Links oder Rechts?)


Wie kann ich denn dann mein Problem lösen? Die Rechts-Links-Unterscheidung dient ja eigentlich nur dazu, dass ich meinen Mitschülern die leichten Fragen zusteuern kann. Von außen soll hat alles so aussehen als ginge es mit rechten Dingen zu ;)
Weisst du da was?
 

mlauX

Mitglied
Guck mal hier:

Java:
public void mouseClicked(MouseEvent e) {
  if (e.getModifiers() == 4) {
    // niergend eine methode
    button_mouseClicked1(e, x, y);
  }
}

Wenn der e.getModifiers() 4 ist, wurde die rechte maus gedrückt, bei 16 die linke maus.
 

Dan1el

Mitglied
Ahh gut.

Also kann ich das dann so machen, dass ich erst überprüfen lasse, welcher Button angeklickt wurde und als zweiter Schritt wird geschaut mit welcher Maustaste und dann kann die entsprechende Frage ausgegeben werden.
 

Illuvatar

Top Contributor
Das mit dem getModifiers sieht aber irgendwie unschön aus... irgendwelche Konstanten im Code die vom Himmel fallen sind nie gut. Was spricht gegen getButton oder SwingUtilities?

Ich hab grad einfach mal ein kleines Beispiel geschrieben, wie man das Problem vielleicht lösen könnte:
Java:
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.*;

public class Example extends JFrame {
    private JLabel questionText;

    public Example() {
        super("Fußball-Quiz!");

        setLayout(new BorderLayout());
        questionText = new JLabel("", SwingConstants.CENTER);
        add(questionText, BorderLayout.CENTER);
        JButton newQuestionButton = new JButton("Neue Frage!");
        add(newQuestionButton, BorderLayout.SOUTH);

        newQuestionButton.addMouseListener(new MyListener(this));

        setSize(500, 250);
        setLocationByPlatform(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public void newQuestion(boolean easy) {
        if (easy) {
            questionText.setText("Wer wird im Jahr 2010 Weltmeister?");
        } else {
            questionText.setText("Wer wird im Jahr 2*3*5*67 Weltmeister?");
        }
    }

    public static void main(String[] args) {
        new Example();
    }
}

class MyListener extends MouseAdapter {
    private Example example;

    public MyListener(Example e) {
        example = e;
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        if (SwingUtilities.isLeftMouseButton(e)) {
            example.newQuestion(false);
        } else if (SwingUtilities.isRightMouseButton(e)) {
            example.newQuestion(true);
            JButton source = (JButton) e.getSource();
            source.doClick();
        }
    }
}
Der wichtige Teil ist die letzte Methode ganz unten ;)
 

Dan1el

Mitglied
@Illuvatar

genau so hab ich mir das vorgestellt! :)

Ich hab mein Programm jetzt auch erweitert, jedoch ist deine Idee nicht eingebunden, bei mir ist jetzt gerade das Problem, dass die Erkennung ob links oder rechtsklick nur über dem JLabel funktioniert, nicht jedoch über den Buttons.

Hier mein Code: ist ziemlich primitiv, aber 2 Jahre Java in der Schule und nur mit awt geben nicht mehr her :(
Java:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class FussballQuiz extends JFrame 

{
  Container c;          
  JLabel beschriftung, textfeld;  
  JButton frage0, frage1, frage2, frage3, frage4, frage5, frage6, frage7, frage8, frage9;
  Color f;
  JPanel panel1,panel2,panel3;

  public FussballQuiz() 
  
  {
    c = getContentPane();
    c.setLayout(new GridLayout(3,0));
	
	JPanel panel1 = new JPanel();
	JPanel panel2 = new JPanel();
	JPanel panel3 = new JPanel();

	panel1.setLayout(new FlowLayout());
	panel2.setLayout(new GridLayout(0,5));
	panel3.setLayout(new GridLayout(0,5));
	
	textfeld = new JLabel("Hier steht die Frage ;) ");
	panel1.add(textfeld);
	
	panel2.add(frage0 = new JButton("Frage 1"));
	panel2.add(frage1 = new JButton("Frage 2"));
	panel2.add(frage2 = new JButton("Frage 3"));
	panel2.add(frage3 = new JButton("Frage 4"));
	panel2.add(frage4 = new JButton("Frage 5"));
	panel3.add(frage5 = new JButton("Frage 6"));
	panel3.add(frage6 = new JButton("Frage 7"));
	panel3.add(frage7 = new JButton("Frage 8"));
	panel3.add(frage8 = new JButton("Frage 9"));
	panel3.add(frage9 = new JButton("Frage 10"));
	
	frage0.addActionListener(new MyActionListener());
	
	c.add(panel1);
	c.add(panel2);
	c.add(panel3);
	c.addMouseListener(new MyMouseListener());
  }
  
  public static void main(String[] args) 
  {
      FussballQuiz fenster = new FussballQuiz();
      fenster.setTitle("Fussball-Quiz");
      fenster.setSize(800,400);
      fenster.setLocation(100,100);
      fenster.setResizable(false);
      fenster.setVisible(true);
      fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
  
  class MyActionListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{	
			System.out.println("Gedrückt!");
		}	
	}

public class MyMouseListener extends MouseAdapter
    {
        public void mouseClicked(MouseEvent e) 
		{
		if (e.getModifiers() == 4) 
			{
   			System.out.println("Rechte Maustaste");
  			}
  		if (e.getModifiers() == 16) 
			{
   			System.out.println("Linke Maustaste");
  			}	
		}
    }   
}

Darf ich deinen Code übernehmen?
 

Ähnliche Java Themen

Neue Themen


Oben