2012-02-20 18 views
3

JButtonにmouseAdapterを追加しようとすると、右クリックしてセルにフラグを立てます。問題は、私はボタンにインスタンス化するとき、それは私をさせません。おそらく既にそれにアクションリスナーがあるからでしょうか?私はあまりよく分からない。どんな助けもありがとうございます。私は掃海艇のゲームを作成しています。それが動作するかどうか右クリック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

から

?これは男の最初の質問です... –

+0

コンパイラはここにあなたの友人です:どうしてあなたは何もしませんmouseListener :-) – kleopatra

答えて

2

MouseAdapterのは抽象クラスであり、あなたはそれのインスタンスを作成することはできません。 そのため、エラーが発生します。

あなたが

1について見てマインスイーパゲームの

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

JToggleButton

2)IconJToggleButtonの方法

  • JToggleButton#setIcon();

  • を追加10

  • JToggleButton#setDisabledIcon();

3)JToggleButton

4にMouseListenerを追加)することができ

結果内部メソッドSwingUtilities.isRightMouseButton()mouseClickedをオーバーライド

enter image description here enter image description here

コード何のことをいっている@deporter

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、それは有望です、私はこの考えが必要でした:-) –

関連する問題