uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 29 déc. 2007 à 10:33
Et voici un essai d'intégration dans Minesweeper:
public class GameGrid extends JPanel implements MouseListener, SquareButtonListener {
...
private boolean left;
private boolean right;
private boolean none;
private boolean leftRight;
private boolean leftNotright;
private boolean rightNotleft;
private MouseEvent evt;
private Thread buttonThread;
...
...
private void squareButton_leftrightClick(SquareButton square) {
System.out.println(square.getXSquare() + "," + square.getYSquare() + " leftRight");
}
...
public void mousePressed(MouseEvent e) {
if (buttonThread == null || !buttonThread.isAlive()) {
buttonThread = new Thread(new RunButton());
buttonThread.start();
}
setKey(e, true);
if (AppFrame.getInstance().getGameBoard().isInGame()) {
AppFrame.getInstance().getGameBoard().indicateMousePressed();
}
}
public void mouseReleased(MouseEvent e) {
if (leftNotright) {
leftAction(e);
}
setKey(e, false);
if (AppFrame.getInstance().getGameBoard().isInGame()) {
AppFrame.getInstance().getGameBoard().indicateMouseReleased();
}
}
...
public void leftAction(MouseEvent evt) {
SquareButton square = (SquareButton) evt.getSource();
if (AppFrame.getInstance().getGameBoard().isInGame()) {
this.squareButton_leftClick(square);
}
}
public void rightAction(MouseEvent evt) {
SquareButton square = (SquareButton) evt.getSource();
if (AppFrame.getInstance().getGameBoard().isInGame()) {
this.squareButton_rightClick(square);
}
}
public void leftRightAction(MouseEvent evt) {
SquareButton square = (SquareButton) evt.getSource();
if (AppFrame.getInstance().getGameBoard().isInGame()) {
this.squareButton_leftrightClick(square);
}
}
public void noneAction(MouseEvent evt) {
if (buttonThread != null && buttonThread.isAlive()) {
buttonThread.interrupt();
}
}
private void setKey(final MouseEvent e, final boolean b) {
evt = e;
if (SwingUtilities.isLeftMouseButton(e)) {
left = b;
}
if (SwingUtilities.isRightMouseButton(e)) {
right = b;
}
}
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 20 déc. 2007 à 18:57
Je viens d'optimiser un peu. Dans la première version, le Thread tournait tout le temps.
Maintenant, il est démarré seulement quand on enfonce un bouton de la souris.
Si aucun bouton n'est enfoncé, le Thread est interrompu.
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 20 déc. 2007 à 17:23
damned3
Messages postés22Date d'inscriptionmercredi 8 juin 2005StatutMembreDernière intervention18 décembre 2007 18 déc. 2007 à 22:18
En effet, il y a bel et bien une fonction spéciale.
Je suis surpris, je ne la connaissais pas et mon collègue "démineur-freak" ne la connaissais pas non-plus.
J'avoue que c'est utile, mais je ne sais pas comment je pourrais détecter un clic simultané des deux boutons en Java.
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 18 déc. 2007 à 10:08
Bravo, cela a l'air de bien fonctionner.
Ce qu'on pourrait faire encore:
Dans le démineur de Windows on peut cliquer sur un carré simultanément avec les boutons gauche et droit de la souris
pour avoir une fonction spéciale (voir "Stratégies et astuces" dans l'aide du démineur de Windows).
21 sept. 2014 à 17:34
29 déc. 2007 à 10:33
public class GameGrid extends JPanel implements MouseListener, SquareButtonListener {
...
private boolean left;
private boolean right;
private boolean none;
private boolean leftRight;
private boolean leftNotright;
private boolean rightNotleft;
private MouseEvent evt;
private Thread buttonThread;
...
...
private void squareButton_leftrightClick(SquareButton square) {
System.out.println(square.getXSquare() + "," + square.getYSquare() + " leftRight");
}
...
public void mousePressed(MouseEvent e) {
if (buttonThread == null || !buttonThread.isAlive()) {
buttonThread = new Thread(new RunButton());
buttonThread.start();
}
setKey(e, true);
if (AppFrame.getInstance().getGameBoard().isInGame()) {
AppFrame.getInstance().getGameBoard().indicateMousePressed();
}
}
public void mouseReleased(MouseEvent e) {
if (leftNotright) {
leftAction(e);
}
setKey(e, false);
if (AppFrame.getInstance().getGameBoard().isInGame()) {
AppFrame.getInstance().getGameBoard().indicateMouseReleased();
}
}
...
public void leftAction(MouseEvent evt) {
SquareButton square = (SquareButton) evt.getSource();
if (AppFrame.getInstance().getGameBoard().isInGame()) {
this.squareButton_leftClick(square);
}
}
public void rightAction(MouseEvent evt) {
SquareButton square = (SquareButton) evt.getSource();
if (AppFrame.getInstance().getGameBoard().isInGame()) {
this.squareButton_rightClick(square);
}
}
public void leftRightAction(MouseEvent evt) {
SquareButton square = (SquareButton) evt.getSource();
if (AppFrame.getInstance().getGameBoard().isInGame()) {
this.squareButton_leftrightClick(square);
}
}
public void noneAction(MouseEvent evt) {
if (buttonThread != null && buttonThread.isAlive()) {
buttonThread.interrupt();
}
}
private void setKey(final MouseEvent e, final boolean b) {
evt = e;
if (SwingUtilities.isLeftMouseButton(e)) {
left = b;
}
if (SwingUtilities.isRightMouseButton(e)) {
right = b;
}
}
class RunButton implements Runnable {
public void run() {
while (true) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
break;
}
if (left && right && !leftRight) {
leftRight = true;
none = false;
leftNotright = false;
rightNotleft = false;
leftRightAction(evt);
} else if (!left && !right && !none) {
leftRight = false;
none = true;
leftNotright = false;
rightNotleft = false;
noneAction(evt);
} else if (left && !right && !leftNotright && !leftRight) {
none = false;
leftNotright = true;
rightNotleft = false;
} else if (!left && right && !rightNotleft && !leftRight) {
none = false;
leftNotright = false;
rightNotleft = true;
rightAction(evt);
}
}
}
}
}
20 déc. 2007 à 18:57
Maintenant, il est démarré seulement quand on enfonce un bouton de la souris.
Si aucun bouton n'est enfoncé, le Thread est interrompu.
20 déc. 2007 à 17:23
http://www.java-forum.org/de/userfiles/user3690/LeftRightClickDemo.java
18 déc. 2007 à 22:18
Je suis surpris, je ne la connaissais pas et mon collègue "démineur-freak" ne la connaissais pas non-plus.
J'avoue que c'est utile, mais je ne sais pas comment je pourrais détecter un clic simultané des deux boutons en Java.
18 déc. 2007 à 10:08
Ce qu'on pourrait faire encore:
Dans le démineur de Windows on peut cliquer sur un carré simultanément avec les boutons gauche et droit de la souris
pour avoir une fonction spéciale (voir "Stratégies et astuces" dans l'aide du démineur de Windows).