Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Игра запоминалка 
:(
    Опции темы
kuzmiand
Дата 31.7.2012, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 31.7.2012

Репутация: нет
Всего: нет



 Привет всем!!! Помогите пожалуйста советом, я новичёк в Java, никак не могу дойти, как в игре-запоминалке  реализовать сравнение картинок(ImageIcon) на двух последовательно нажатых  кнопках(JToggleButton) .
 Размещаю 16 кнопок на панели. Имеется 8 картинок ,размещаю их  в кнопки , чтобы картинки 2 раза повторялись.
К кнопкам добавляю слушатель событий addActionListener(new ButtonListener()).
Код

public class JFrameHra extends JFrame  {
    
    public JToggleButton [] jb = new JToggleButton [16];
    public ImageIcon [] img = new ImageIcon[8];
    
    JFrameHra(){
    super("Hra");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setJMenuBar(new JMenuBarHra());
    setLayout(new GridLayout(4,4));
     for (int i=0; i<8; i++){
        jb[i] = new JToggleButton (img [i]= new ImageIcon("img/img1.png") );
        jb[i].setSelectedIcon(img [i]= new ImageIcon("img/img"+i+".png"));
        jb[i].addActionListener(new ButtonListener(jb,img));
        add(jb[i]);
    }
     for (int i=0; i<8; i++){
        jb[i] = new JToggleButton (img [i]= new ImageIcon("img/img1.png") );
        jb[i].setSelectedIcon(img [i]= new ImageIcon("img/img"+i+".png"));
        jb[i].addActionListener(new ButtonListener(jb, img));
        add(jb[i]);
    }
//    Сдеалать форму не меняющей размер
    setResizable(false);
    setSize(550,550);
   
    setLocation(100, 100);
    setVisible(true);
    }
}


  Создаю класс  ButtonListener в нём реализую метод actionPerformed(ActionEvent e) в котором обрабатываю события и здесь ЗАГВОЗДКА ((((, не могу додумать как сравнивать картинки на двух последовательно нажатых кнопках, чтобы, если картинки одинаковые кнопки диактивировались.

Код

public class ButtonListener implements ActionListener {
    
     public JToggleButton [] jb ;
     public ImageIcon [] img;
     
       public ButtonListener(JToggleButton jb[], ImageIcon img[]) {
        this.jb = jb;
        this.img = img;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        JToggleButton b = (JToggleButton)e.getSource();
         }
     }


PM MAIL   Вверх
kuzmiand
Дата 5.8.2012, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 31.7.2012

Репутация: нет
Всего: нет



Ребят, ну помогите пожалуйста!!!
Неужели надо делать на каждую кнопку отдельный слушатель событий???
PM MAIL   Вверх
dorogoyIV
Дата 5.8.2012, 13:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Код

 private ImageIcon tmp_img = null;
  ...
 public void actionPerformed(ActionEvent e)
 {
  JToggleButton jtb = (JToggleButton)e.getSource();

  if(tmp_img == null)
  {
   tmp_img = (ImageIcon)jtb.getIcon();
  }
  else
  {
   ImageIcon icon = (ImageIcon)jtb.getIcon();

   if(tmp_img.getImage().equals(icon.getImage()))
   {
    System.out.println("OK");
   }
   tmp_img = null;
  }
 }

PM MAIL   Вверх
kuzmiand
Дата 7.8.2012, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 31.7.2012

Репутация: нет
Всего: нет



Вопрос решён, спасибо "dorogoyIV"  smile , наталкнул на мысль  
Мой способ :
Код

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import static java.util.Collections.shuffle;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
/**
 *
 * @author Kuzminov
 */
public final class JPanel_1 extends JPanel implements ActionListener {
    
      
     public JToggleButton [] jb;
     public ArrayList <ImageIcon> im;
     private ImageIcon tmp_img ;
     private JToggleButton jtb1 ;
 ///////////////////////////////////////////////////////////   
    public JPanel_1(){
        this.setBorder(BorderFactory.createLineBorder(Color.BLACK) );
        this.setLayout(new GridLayout(4,4));
        setPreferredSize(new Dimension(500,500)); 
        init();
        
    }
/////////////////////////////////////////////////////////////
    public void init(){
        jb = new JToggleButton [16];
        setArrayListImg();
        for (int i=0; i<jb.length; i++){
        jb[i] = new JToggleButton (new ImageIcon(("img/vopros.png")) );
        jb[i].setSelectedIcon(im.get(i));
        jb[i].addActionListener(this);
        jb[i].setBorder(BorderFactory.createLineBorder(Color.BLACK) );
        this.add(jb[i]);
        setOpaque(true);
        tmp_img = null;
        jtb1 = null;
        }
    }
 ////////////////////////////////////////////////////////////
    public void setArrayListImg() {
        im = new ArrayList <ImageIcon>();
        for (int i = 0; i < 2; i++) {
            for (int ii = 0; ii < 8; ii++) {
                im.add(new ImageIcon("img/img"+ii+".png"));
            }
        }
        shuffle(im);
     } 
    
  /////////////////////////////////////////////////////////////
       @Override
  public void actionPerformed(ActionEvent e) {
       JToggleButton jtb = (JToggleButton)e.getSource();
  
  if(tmp_img == null)
  {
   tmp_img = (ImageIcon)jtb.getSelectedIcon();
   jtb1 = jtb;
  }
  else
  {
   JToggleButton jtb2 = (JToggleButton)e.getSource();   
   ImageIcon icon = (ImageIcon)jtb.getSelectedIcon();
   if(tmp_img.getImage().equals(icon.getImage()))
   {
       if (jtb!= jtb1) {
         System.out.println("OK");
         jtb2.setEnabled(false);
         jtb1.setEnabled(false);   
       }
      
   }
   else{
          jtb2.setSelected(false);
          jtb1.setSelected(false);
      }
   tmp_img = null;
  } 
    }
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.