2010-01-05 13 views
14

पर राइट क्लिक करें मैं मजेदार के लिए जावा में एक माइन्सवीपर क्लोन लिखने की कोशिश कर रहा हूं। मेरे पास जेबट्टन का ग्रिड है जिसका लेबल मैं खतरे की गिनती, झंडे इत्यादि का प्रतिनिधित्व करने के लिए बदलूंगा।जेबटन

मेरी समस्या यह है कि मुझे नहीं पता कि बटन को निराश करने के लिए जेबटन पर राइट क्लिक कैसे करें। मैंने निम्नलिखित किया है:

button.addMouseListener(new MouseAdapter(){ 
    public void mouseClicked(MouseEvent e){ 
     boolean mine = field.isMine(x, y); 
     if (e.isPopupTrigger()) { 
      button.setText("F"); 
     } 
     else { 
      if (mine) { 
       button.setText("X"); 
      } 
     } 
    } 
}); 

यह बिल्कुल काम नहीं कर रहा है; "एफ" कभी नहीं दिखाया जाता है, केवल "एक्स" भाग। लेकिन सबसे महत्वपूर्ण बात यह है कि यह बटन को निराश करने के लिए कुछ नहीं करता है।

संपादित करें: मैक के पास माउसप्रेस पर पॉपअप ट्रिगर होता है, माउस क्लिक नहीं।

संपादित करें:

button.addMouseListener(new MouseAdapter(){ 
      boolean pressed; 

      @Override 
      public void mousePressed(MouseEvent e) { 
       button.getModel().setArmed(true); 
       button.getModel().setPressed(true); 
       pressed = true; 
      } 

      @Override 
      public void mouseReleased(MouseEvent e) { 
       //if(isRightButtonPressed) {underlyingButton.getModel().setPressed(true)); 
       button.getModel().setArmed(false); 
       button.getModel().setPressed(false); 

       if (pressed) { 
        if (SwingUtilities.isRightMouseButton(e)) { 
         button.setText("F"); 
        } 
        else { 
         button.setText("X"); 
        } 
       } 
       pressed = false; 

      } 

      @Override 
      public void mouseExited(MouseEvent e) { 
       pressed = false; 
      } 

      @Override 
      public void mouseEntered(MouseEvent e) { 
       pressed = true; 
      }      
     }); 
     add(button); 

Minesweeper clone http://grab.by/1y9z

+0

है और हाँ मुझे पता है अंतिम बोर्ड उन सभी नंबरों को दिखाया नहीं होना चाहिए। मैं बस विकास कर रहा हूँ। – I82Much

+0

आपको इस 'popupTrigger' सामान के लिए क्या चाहिए? बस घटनाओं की जांच करें माउस दबाए रखें और BUTTON1_MASK या BUTTON2_MASK के लिए ईवेंट के संशोधक जांचें। –

उत्तर

5

बटन दायाँ क्लिक करके दबाया नहीं जा सकता है।

if(needReset) {underlyingButton.getModel().setPressed(false)); 

या वहाँ जो कुछ करना चाहते हैं:

if(isRightButtonPressed) {underlyingButton.getModel().setPressed(true)); 

mouseReleased: आप माउस श्रोता

mousePressed लिए इस तरह के एक पंक्तियां जोड़ें।

+0

मैं आज रात कोशिश करूंगा; सबसे आशाजनक लग रहा है। – I82Much

+1

दृश्य संकेतों को सही तरीके से काम करने के लिए, setPressed() – I82Much

1

http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/MouseEvent.html

MouseEvent कुछ गुण

static int BUTTON1 
static int BUTTON2 
static int BUTTON3 

दूसरों के बीच में है: यहाँ समाधान मैं स्वीकार किए जाते हैं जवाब के आधार पर बाहर काम किया है। जब आपकी घटना आग लगती है तो उनको जांचें।

संपादित

सार्वजनिक पूर्णांक getButton()

Returns which, if any, of the mouse buttons has changed state. 
+0

धन्यवाद, मैं प्राप्त कर सकता हूं कि कौन सा बटन दबाया गया था, लेकिन अब यह मेरी समस्या नहीं है। – I82Much

0

बटन राइट क्लिक पर दिख उदास जा रहा है बटन के "सामान्य" व्यवहार का हिस्सा नहीं है। आप JToggleButton एस का उपयोग करके इसे नकली करने में सक्षम हो सकते हैं, या बस माउस के बटन को दबाकर बटन के पृष्ठभूमि रंग और शायद सीमा को बदल सकते हैं।

4

मैं isPopupTrigger का उपयोग नहीं होगा, लेकिन सीधे सही बटन के लिए जाँच: button.setText ("एफ

button.addMouseListener(new MouseAdapter(){ 
    public void mouseClicked(MouseEvent e){ 
    boolean mine = field.isMine(x, y); 
    if (e.getButton() == MouseEvent.BUTTON2) { 
     button.setText("F"); 
    } 
    ... 
0

आपको विश्वास है कि घटना को ठीक से शुरू हो रहा किया जा रहा है कर रहे हैं (डिबग FTW!) और है कि ") हो रहा है, तो शायद आपको बस पेंट करने की जरूरत है।

बटन को दोबारा दबाएं। http://java.sun.com/javase/6/docs/api/javax/swing/JComponent.html#repaint(java.awt.Rectangle)

+0

मेरा संपादन देखें - अब समस्या नहीं। – I82Much

1

जैसा कि आपने उल्लेख किया है कि "माउसप्रेस" की जांच करने से आपकी समस्या हल हो गई है। और isPopupTrigger की जावाडोक इस के लिए जरूरत की व्याख्या करता है:

सार्वजनिक बूलियन isPopupTrigger()
...
नोट: पॉपअप मेनू विभिन्न प्रणालियों पर अलग ढंग से ट्रिगर कर रहे हैं। इसलिए, उचित क्रॉस-प्लेटफार्म कार्यक्षमता के लिए माउस दबाए गए और माउस दोनों में पॉपअप ट्रिगर की जांच की जानी चाहिए।

जावा Swing ट्यूटोरियल में माउस श्रोता एपीआई पर अनुभाग को भी देखें

0

यह मैक पर ठीक मेरे लिए काम करता है:

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

public class ButtonTest extends JFrame { 

    JButton button; 

    public ButtonTest() { 
     button = new JButton("W"); 
     button.addMouseListener(new MouseAdapter() { 
      public void mouseClicked(MouseEvent e) { 
       if (e.getButton() == 3) { // if right click 
        button.setText("F"); 
        button.getModel().setPressed(false); 
        // button.setEnabled(true); 
       } else { 
        button.setText("X"); 
        button.getModel().setPressed(true); 
        // button.setEnabled(false); 
       } 
      } 
     }); 
     this.add(button); 
     this.setVisible(true); 
    } 

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

} 

साथ ही आप e.getButton() == 2 के लिए जाँच कर सकते हैं, लेकिन जब यह एक Macs पर शुरू हो रहा है मैं नहीं जानता।

2

बस एक छोटा सा अतिरिक्त: सही बटन के लिए जाँच करने के लिए सबसे आसान तरीका SwingUtilities.isRightMouseButton

+0

से पहले setArmed() को कॉल करने की आवश्यकता है यह ctrl + के लिए काम नहीं करता है जो मैक पर क्लिक करता है जो आमतौर पर दायाँ क्लिक ट्रिगर करता है। – I82Much

संबंधित मुद्दे