I'm triyng to make a game like bejeweled or candy crush. I have created 64 buttons units 8x8. I want to change the image of buttons clicked. But i couldn't. I would be glad if you can help. Or how else can I do?
Edit: I'm so sorry. I couldn't explain my problem clearly. My problem, i want to change pictures of clicked two buttons. For example, i clicked buttons[5] and i clicked buttons[11]. Then icon of buttons[5] should be buttons[11] icon and icon of [11] should be buttons[5] icon.
public class butondeneme extends JFrame{
private JPanel grid;
private JFrame jr;
public butondeneme(){
jr=new JFrame();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 640, 640);
grid=new JPanel();
grid.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
grid.setLayout(new GridLayout(8,8,5,5));
JButton[] buttons = new JButton[64];
//Creating random image for buttons
for (int i = 0; i<buttons.length; i++) {
Random r = new Random();
int a = r.nextInt(9)+1;
switch(a){
case 1 : buttons[i]=new JButton(new ImageIcon("img//Cakal.png"));
break;
case 2 : buttons[i]=new JButton(new ImageIcon("img//BugsBunny.png"));
break;
case 3 : buttons[i]=new JButton(new ImageIcon("img//Pig.png"));
break;
case 4 : buttons[i]=new JButton(new ImageIcon("img//Taz.png"));
break;
case 5 : buttons[i]=new JButton(new ImageIcon("img//Sam.png"));
break;
case 6 : buttons[i]=new JButton(new ImageIcon("img//DuffyDuck.png"));
break;
case 7 : buttons[i]=new JButton(new ImageIcon("img//Tweety.png"));
break;
case 8 : buttons[i]=new JButton(new ImageIcon("img//Slyvester.png"));
break;
case 9 : buttons[i]=new JButton(new ImageIcon("img//RoadRunner.png"));
break;
}
//Adding number to find easily
String comand=Integer.toString(i);
//Get ImageIcon name
final String imgName=((ImageIcon)buttons[i].getIcon()).toString();
buttons[i].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
}
}
});
buttons[i].setActionCommand(comand);
grid.add(buttons[i]);
}
add(grid);
}
public static void main(String[] args){
butondeneme erdem=new butondeneme();
erdem.setVisible(true);
}
}
You simply needs to use a JButton.setIcon()
method, to get the desired effect. Though might have to modify it to suite your needs, to let it work for your use case. Please have alook at this attached code example:
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
public class ButtonIconExample {
private JButton[] buttons = new JButton[64];
//private Icon informationIcon = UIManager.getIcon("OptionPane.informationIcon");
//private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
private Icon[] icons = {UIManager.getIcon("OptionPane.informationIcon"),
UIManager.getIcon("OptionPane.errorIcon"),
UIManager.getIcon("OptionPane.warningIcon")};
private int previousIndex;
private Random random;
private ActionListener buttonActions = new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
JButton button = (JButton) ae.getSource();
if (previousIndex == -1)
previousIndex = Integer.parseInt(button.getActionCommand());
else {
Icon previousIcon = buttons[previousIndex].getIcon();
Icon currentIcon = button.getIcon();
buttons[previousIndex].setIcon(currentIcon);
button.setIcon(previousIcon);
previousIndex = -1;
}
}
};
public ButtonIconExample() {
previousIndex = -1;
random = new Random();
}
private void displayGUI() {
JFrame frame = new JFrame("Button Icon Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel();
contentPane.setLayout(new GridLayout(8, 8, 5, 5));
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JButton();
buttons[i].setIcon(icons[random.nextInt(3)]);
buttons[i].setActionCommand("" + i);
buttons[i].addActionListener(buttonActions);
contentPane.add(buttons[i]);
}
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String... args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
new ButtonIconExample().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
我认为您可以使用:
Button.setIcon(newImage);
I assume you are looking for a solution how to find which button fired ActionEvent
? If so, it can be done at the following way:
buttons[i].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JButton button = (JButton) e.getSource();
button.setIcon(<your icon>);
}
};
This should work
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class butondeneme extends JFrame{
private JPanel grid;
private JFrame jr;
JButton[] buttons;
public butondeneme(){
jr=new JFrame();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 640, 640);
grid=new JPanel();
grid.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
grid.setLayout(new GridLayout(8,8,5,5));
buttons = new JButton[64];
//Creating random image for buttons
for (int i = 0; i<buttons.length; i++) {
Random r = new Random();
int a = r.nextInt(9)+1;
switch(a){
case 1 : buttons[i]=new JButton(new ImageIcon("img//Cakal.png"));
break;
case 2 : buttons[i]=new JButton(new ImageIcon("img//BugsBunny.png"));
break;
case 3 : buttons[i]=new JButton(new ImageIcon("img//Pig.png"));
break;
case 4 : buttons[i]=new JButton(new ImageIcon("img//Taz.png"));
break;
case 5 : buttons[i]=new JButton(new ImageIcon("img//Sam.png"));
break;
case 6 : buttons[i]=new JButton(new ImageIcon("img//DuffyDuck.png"));
break;
case 7 : buttons[i]=new JButton(new ImageIcon("img//Tweety.png"));
break;
case 8 : buttons[i]=new JButton(new ImageIcon("img//Slyvester.png"));
break;
case 9 : buttons[i]=new JButton(new ImageIcon("img//RoadRunner.png"));
break;
}
//Adding number to find easily
String comand=Integer.toString(i);
//Get ImageIcon name
final String imgName=((ImageIcon)buttons[i].getIcon()).toString();
buttons[i].addActionListener(new ButtonListener(i));
add(grid);
}
}
public static void main(String[] args){
butondeneme erdem=new butondeneme();
erdem.setVisible(true);
}
class ButtonListener implements ActionListener{
int index;
public ButtonListener(int index) {
this.index=index;
}
@Override
public void actionPerformed(ActionEvent e) {
buttons[index].setIcon(new ImageIcon("new_icon.png"));
}
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.