2012-02-27 9 views
1

Я пытаюсь сделать карту памяти, соответствующую игре, известной как Концентрация. Пока у меня 3 класса. Память расширяет JFrame реализует ActionListenerПопытка изменить значок на JButton при нажатии

Совет расширяет JPanel реализует ActionListener

Cell расширяет 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 на true. Это мой метод setIcon2 в классе Cell.

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


    x = getImageIcon(); 


    setIcon(x); 
    } 

Вот метод getImageIcon в классе Cell.

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 возвращает целочисленную переменную, связанную со значением, хранящимся на моей игровой плате. (2D-массив типа Cell).

Попытался объяснить мое затруднительное положение как можно более четко, любое направление будет высоко оценено и оценено. Спасибо Mjall2

ответ

6

Использовать JToggleButton. В частности, используйте методы setIcon и setSelectedIcon. Используя этот подход, вы избежите изобретать колесо.

ПРИМЕР -

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). –

Смежные вопросы