2012-02-27 8 views
1

私は、Concentrationと呼ばれるゲームに合ったメモリカードを作ろうとしています。今まで私は3つのクラスを持っています。 メモリーのJFrameはActionListenerのクリックするとJButtonのアイコンを変更しようとしています

ボード実装したJPanelはActionListenerの

セルは、私がこれまでにポップアップするウィンドウを達成しているのJButton

拡張実装して拡張し拡張します。セルの種類のペアを追加するには、リストを使用します。ボード全体にランダムにすべてのセルを配布します。すべてのセルの背面(img)を表示します(24セル、4行6列あります)。カードをクリックすると、白いイメージが表示されます。私が達成しようとしているのは、ボタンをクリックすると、ボタンに適切な画像が表示されるということです。

私はこのようにActionPerformedをクラスBoardに実装しました。

public void actionPerformed(ActionEvent e){ 

     if(e.getSource() instanceof Cell){ 

     Cell temp = (Cell)e.getSource(); 

     temp.setSelected(true); 

     if (temp.selected()){ 

      int row = temp.getRow(); 
      int column = temp.getColumn(); 

      board[row][column].setIcon2(); 


     } 
     }} 

マイセット選択方法は、唯一の真のセルクラスにブール変数の値を変更するのに役立ちます。 これは、CellクラスのsetIcon2メソッドです。

public void setIcon2(){ 
    ImageIcon x = new ImageIcon(); 


    x = getImageIcon(); 


    setIcon(x); 
    } 

ここでは、クラスCellのgetImageIconメソッドを示します。

private ImageIcon getImageIcon() { 
    int temp=0; 
    int id; 
    if (localSelected) { 

    id = getType(); 

    String tempId = Integer.toString(id);  

    icons[temp] = new ImageIcon("img-" + tempId + ".jpg"); 
    temp++; 

    return icons[temp]; 
} else { 

    id = IMAGE_NUMBER; 
    String strId = Integer.toString(id); 
    icons[id] = new ImageIcon("img-" + strId + ".jpg"); 

} 

    return icons[id]; 
    } 

どのような種類のコンパイルエラーも警告もありません。 getTypeメソッドは、私のゲームボードに格納されている値に関連付けられた整数変数を返します。 (タイプCellの2D配列)。

私の苦境をできるだけ明確に説明しようと、どのような方向性も高く評価され、評価されます。 ありがとうございます Mjall2

答えて

6

JToggleButtonを使用してください。具体的には、setIconsetSelectedIconのメソッドを使用します。このアプローチを使用すると、ホイールの再発明を避けることができます。

例 -

import java.awt.FlowLayout; 
import javax.swing.JFrame; 
import javax.swing.JToggleButton; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 

final class JToggleButtonDemo { 
    public static final void main(final String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      @Override 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
    private static final void createAndShowGUI(){ 
     final JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new FlowLayout()); // For presentation purposes only. 
     final JToggleButton button = new JToggleButton(UIManager.getIcon("OptionPane.informationIcon")); 
     button.setSelectedIcon(UIManager.getIcon("OptionPane.errorIcon")); 
     frame.add(button); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 

選択されていないとエラーアイコンを選択すると場合、情報アイコンが表示され、この例ではトグルボタン。

+0

setSelectedIconメソッドを使ってみました(既にsetIconメソッドを使用しています) イメージは変更されませんが、強調表示されるようになりました。 – Mjall2

+1

ありがとう! – Mjall2

+3

この[関連例](http://stackoverflow.com/a/7360696/418556)も参照してください。 –

関連する問題