Попытка изменить значок на JButton при нажатии - PullRequest
1 голос
/ 27 февраля 2012

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

Плата расширяет JPanel, реализует ActionListener

Ячейка расширяет JButton

До сих пор я получил окно для всплывающего окна. Используйте список, чтобы добавить пары типов клеток. Распределите все ячейки случайным образом по моей доске. Показать заднюю часть (изображение) всех ячеек (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

1 Ответ

6 голосов
/ 27 февраля 2012

Используйте 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);
    }
}

Кнопка переключения в этом примере покажет информационный значок, если он не выбран, и значок ошибки, если он выбран.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...