2012-02-20 6 views
3

пытается добавить адаптер мыши в JButton, щелкнув правой кнопкой мыши, чтобы отметить ячейку. Проблема в том, что я создаю его на кнопку, это не позволит мне. Может быть, потому, что на нем уже есть actionlistener? Я не слишком уверен. Любая помощь приветствуется. Я создаю игру Minesweeper, fyi.Щелкните правой кнопкой мыши на JButton

button = new JButton[size][size]; 
ButtonListener bl = new ButtonListener(); 
for (int r = 0; r < size; r++) { 
for (int c = 0; c < size; c++) { 
button[r][c] = new JButton(""); 
button[r][c].addActionListener(bl); 
button[r][c].addMouseListener (new MouseAdapter());`` 
// error message: cannot instantiate the type MouseAdapter 
panel.add(button[r][c]); 

в конце концов, если это работает, я хочу, чтобы включить это в игру:

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); 
     } 
    } 
}); 
+0

@deporter Что ты говоришь? Это первый вопрос парня ... –

+0

компилятор - ваш друг здесь: почему бы вам когда-нибудь захотеть зарегистрировать do-nothing-mouseListener :-) – kleopatra

ответ

2

MouseAdapter является абстрактным классом, и вы не можете создавать экземпляры этого. Вот почему вы получаете сообщение об ошибке.

button[r][c].addMouseListener (new MouseAdapter()); // this will not work 

button[r][c].addMouseListener (new MouseAdapter(){}); // this will 
               ^

button[r][c].addMouseListener (new MouseAdapter(){ 
    public void mouseClicked(MouseEvent e){ 
     // and this will actually do sth. ;) 
    } 
}); 
+1

на месте, хорошо поймать :-) – kleopatra

5

Для игры Сапер вы должны искать

1) JToggleButton

2) добавить Icon в JToggleButton методы

  • JToggleButton#setIcon();

  • JToggleButton#setSelectedIcon();

  • JToggleButton#setDisabledIcon();

3) добавить к MouseListenerJToggleButton

4) переопределить mouseClicked методом SwingUtilities.isRightMouseButton() внутри

результате может быть

enter image description hereenter image description hereenter image description here

из кода

import java.awt.Insets; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import javax.swing.Icon; 
import javax.swing.JFrame; 
import javax.swing.JToggleButton; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 

public class MyToggleButton extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon"); 
    private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon"); 
    private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon"); 

    public MyToggleButton() { 
     final JToggleButton toggleButton = new JToggleButton(); 
     toggleButton.setBorderPainted(false); 
     toggleButton.setBorder(null); 
     toggleButton.setFocusable(false); 
     toggleButton.setMargin(new Insets(0, 0, 0, 0)); 
     toggleButton.setContentAreaFilled(false); 
     toggleButton.setIcon((errorIcon)); 
     toggleButton.setSelectedIcon(infoIcon); 
     //toggleButton.setRolloverIcon((infoIcon)); 
     //toggleButton.setPressedIcon(warnIcon); 
     toggleButton.setDisabledIcon(warnIcon); 
     toggleButton.addMouseListener(new MouseListener() { 

      public void mouseClicked(MouseEvent e) { 
       if (SwingUtilities.isRightMouseButton(e) && e.getClickCount() == 1) { 
        if (toggleButton.isEnabled()) { 
         toggleButton.setEnabled(false); 
        } else { 
         toggleButton.setEnabled(true); 
        } 
       } 
      } 

      public void mousePressed(MouseEvent e) { 
      } 

      public void mouseReleased(MouseEvent e) { 
      } 

      public void mouseEntered(MouseEvent e) { 
      } 

      public void mouseExited(MouseEvent e) { 
      } 
     }); 
     add(toggleButton); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       MyToggleButton t = new MyToggleButton(); 
      } 
     }); 
    } 
} 
+0

+1, что является перспективным , Мне нужна эта идея :-) –