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;)
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;)
setIcon()
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 :-(
Błąd jest dość oczywisty ;)
jak działa program:
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 :)
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);
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?
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.