Podmiana obrazka na buttonie?

0

Nakładam obrazek na button za pomocą:

b[1] = new JButton(new ImageIcon("obrazek_1.jpg"));

Chciałbym aby po kliknięciu na niego obrazek_1.jpg został podmieniony na np. obrazek_2.jpg ?
Słuchacza już mam dodanego;)

0
setIcon()
0

Dzięki Koziołek setIcon() pomogło, jednak teraz borykam się z innym problemem:/

Oto mój kod programu:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Memo extends JFrame implements ActionListener
{
    int i = 0;
    JFrame okno;
    JButton b[] = new JButton[20];
    JPanel panel = new JPanel();
    JPanel karta_tyl= new JPanel();
    JPanel punkty = new JPanel();
    JLabel licz=new JLabel("0965456787654", JLabel.RIGHT);
    String tab[] = {"1.jpg","1.jpg","2.jpg","2.jpg","3.jpg","3.jpg","4.jpg","4.jpg","5.jpg","5.jpg"
	,"9.jpg","9.jpg","10.jpg","10.jpg","W.jpg","W.jpg","D.jpg","D.jpg","K.jpg","K.jpg"};
    
    private Memory mk = new Memory();
        public static void main(String args[])
             {new Memo();}

public Memo() {
                okno = new JFrame("Memory");
		okno.setSize(570, 600);
		okno.setResizable(false);
		panel.setLayout(new BorderLayout());
		okno.getContentPane().add(panel);				
		 
                okno.addWindowListener(new WindowAdapter(){
                     public void windowClosing(WindowEvent e){
                        System.exit(0);
                        }
                   }); 
		
                karta_tyl.setLayout(new GridLayout(4,0,5,5));	
                punkty.setLayout(new GridLayout(1,1));     
                punkty.add(licz);
		panel.add(karta_tyl, BorderLayout.CENTER);
		panel.add(punkty, BorderLayout.EAST);
		
		for(i=0; i<20; i++)
		{
			b[i] = new JButton(new ImageIcon("karta_tyl.jpg"));
			b[i].addActionListener(this);
		}				
		for(i=1; i<5; i++)
		{
			for(int j=0; j<5; j++)
			karta_tyl.add(b[(i-1)*5+j]);
                }
                okno.setVisible(true);
}
public void actionPerformed(ActionEvent ev)
	{
               b[i].setIcon(new ImageIcon(tab[1]));              
	}
}

Chciałbym aby po kliknięciu na określoną kartę z tablicy b[i] podmieniło mi obrazek na ten o nazwie z tablicy tab[i] o tym samym indeksie "i". Kiedy klikam na dowolną kartę z tablicy b[i] zawsze podmienia mi się obrazek na karcie b[5] :/

Nie wiem o co chodzi :-(

0

Błąd jest dość oczywisty ;)

jak działa program:

  1. tworzy obiekty kart oraz m.n. ustawia i na 0
  2. w pętli dodaje przyciski, na koniec pętli i = 20
  3. w kolejnej pętli dodaje karty, na koniec pętli i =5

w momencie kliknięcia wywoływana jest zmiana obrazka dla obiektu o indeksie i, a i aktualnie wynosi 5.

Nie powiem ci jak to zmienić, ale wystarczy troszkę pokombinować i będzie git :)

0

To

                okno.addWindowListener(new WindowAdapter(){
                     public void windowClosing(WindowEvent e){
                        System.exit(0);
                        }
                   }); 

jest konstrukcja typowa dla okien klasy Frame, dla okien klasy JFrame jest coś takiego

okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
0

Dzięki ;-) Mój problem rozwiązał ten fragment kodu:

public void actionPerformed(ActionEvent ev)
	{
            for(int i=0;i<b.length;i++)
            {
                if(ev.getSource().equals(b[i]))
                {b[i].setIcon(new ImageIcon(tab[i])); break;}   
            }
        }

:-)

A mam jeszcze jedno pytanko-> Da rade przerobić ten program tak aby to był komponent?

0

Co do tej metody, to czasochłonną metodą odzyskujesz informację, którą wcześniej na włąsne życzenie gubisz. Jeżeli b[i] oraz tab[i] są ze sobą związane indeksem, który musisz wyszukiwać, to każde dwa obiekty obiekty b[i] oraz tab[i] należy połączyć w jednym obiekcie. Na przykład takim, który dziedziczy po JButton i w którym od razu możesz umieścić właściwy obiekt String (tab[i]). Wtedy dostałbyś się do tej danej od razu z e.getSource() rzutując na swój rozszerzony button.

A co do pytanka - jest ono retoryczne. W sofcie na pytanie "czy da się?" odpowiedź jest zawsze tylko jedna i brzmi "tak". Sprawa rozchodzi się o "jak?". A na to odpowiedź w uproszczeniu jest taka: Memo powinno dziedziczyć po JComponent.

1 użytkowników online, w tym zalogowanych: 0, gości: 1