2014-12-18 3 views
0

저는 Java 초보자이므로 지뢰 찾기 게임을 만들려고합니다. 숫자 나 광산을 클릭하면 JButton으로 가득 찬 그리드가 있습니다.JButton에서 마우스 오른쪽 버튼을 클릭하여 잠그고 색상을 변경하십시오. Java

"플래그"를 추가하고 싶습니다. 어떤 버튼을 마우스 오른쪽 버튼으로 클릭 할 때 색상이 바뀝니다. 플래그가 지정되어 있고 '잠김'상태이므로 마우스 오른쪽 버튼을 클릭하지 않으면 클릭 할 수 없습니다. 나는이 마우스 오른쪽 버튼으로 클릭 기능을 작성하려고

public void buttons() 
{ 
    // Creating the grid with buttons 
    grid.setLayout(new GridLayout(20,20)); 
    // Button grid 
    for (int x = 0; x < buttons.length; x++) 
    { 
     for (int y = 0; y < buttons.length; y++) 
     { 
      buttons[x][y] = new JButton(); 
      buttons[x][y].addActionListener(this); 
      grid.add(buttons[x][y]); 
     } 
    } 

여기

내 버튼하지만 나는 현재 붙어이고 도움을 부탁합니다.

public void flag() 
{ 
    buttons.addMouseListener(new MouseAdapter() 
    { 
     public void mousePressed(MouseEvent e) 
     { 
      JButton rightClick = new JButton("Right Click"); 
      rightClick.addActionListener(this); 
     } 
    }); 
} 
+0

및 됨으로써있어 '붙어있어'너 무슨 뜻이야? 정확히? – ochi

+0

나는이 작업을 수행하는 방법에 대해 잘 모르겠다. (버튼을 마우스 오른쪽 버튼으로 클릭하고 색상을 변경할 때). MouseListeners 및 MouseAdapters가 필요하다는 것을 알고 있지만 어떻게 확신 할 수 있습니까? – JOG

+0

'MouseEvent'를 체크 아웃 http://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseEvent.html - 버튼 2 클릭 감지가 필요할 것입니다. – ochi

답변

0

일반적으로, 버튼의 ActionListener를 통해 버튼을 사용자 이벤트를 처리하는 것, 당신이 시도하고 싶은 수행하는 버튼 ActionListener 트리거에서 사용자를 중지, 당신이 할 수있는 가장 쉬운 방법은 비활성화입니다 버튼을 ...

일반적으로,이 사용자 상호 작용을 확인하는 가장 좋은 방법은 일반적으로 아니므로 버튼을 MouseListener의를 사용하여 좋아하지 않지만,이 경우, 요구 사항을

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.border.EmptyBorder; 

public class Test { 

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

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private JButton btn; 

     public TestPane() { 

      setBorder(new EmptyBorder(8, 8, 8, 8)); 

      setLayout(new GridBagLayout()); 
      btn = new JButton("O"); 
      btn.setMargin(new Insets(8, 8, 8, 8)); 
      add(btn); 

      btn.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        System.out.println("You clicked me"); 
       } 
      }); 

      btn.addMouseListener(new MouseAdapter() { 
       @Override 
       public void mouseClicked(MouseEvent e) { 
        if (SwingUtilities.isRightMouseButton(e)) { 
         btn.setEnabled(!btn.isEnabled()); 
         if (btn.isEnabled()) { 
          btn.setText("O"); 
         } else { 
          btn.setText("X"); 
         } 
        } 
       } 
      }); 

     } 

    } 

} 
관련 문제