本文介紹了在Java中使用監(jiān)聽器將按鈕鏈接到圖片的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我正在嘗試用Java創(chuàng)建一個記憶游戲。類似于此,但更簡單->http://www.zefrank.com/memory/
以下是我的代碼:
import javax.swing.*;
public class Memoriin {
public static void main(String[] args) {
JFrame frame = new MemoriinFrame();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
和:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class MemoriinFrame extends JFrame {
private static final long serialVersionUID = 1L;
public static final int DEFAULT_HEIGHT = 600;
public static final int DEFAULT_WIDTH = 800;
public JButton button[] = new JButton[8];
ArrayList<ImageIcon> icons = new ArrayList<ImageIcon>();
ImageIcon tail = new ImageIcon("foto.jpg");
ImageIcon photo1 = new ImageIcon("foto1.jpg");
ImageIcon photo2 = new ImageIcon("foto2.jpg");
ImageIcon photo3 = new ImageIcon("foto3.jpg");
ImageIcon photo4 = new ImageIcon("foto4.jpg");
ImageIcon photo1copy = photo1;
ImageIcon photo2copy = photo2;
ImageIcon photo3copy = photo3;
ImageIcon photo4copy = photo4;
public MemoriinFrame() {
setTitle("Memory Game");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
setLayout(new GridLayout(2, 4));
addIcons();
for(int i = 0; i <= 7; i++) {
button[i] = new JButton();
button[i].setIcon(tail);
button[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
performActionEventHandler();
}
});
add(button[i]);
}
}
public void performActionEventHandler() {
// how can I link each button with a specific picture?
}
public void addIcons() {
icons.add(photo1);
icons.add(photo2);
icons.add(photo3);
icons.add(photo4);
icons.add(photo1copy);
icons.add(photo2copy);
icons.add(photo3copy);
icons.add(photo4copy);
Collections.shuffle(icons);
}
public void tailToImage(JButton button) {
button.setIcon(icons.get(0));
icons.remove(0);
}
}
因此,我正在嘗試將按鈕與特定圖片鏈接。我試圖這樣做,但得到了一個不必要的結(jié)果:如果我單擊一個按鈕,則圖片會變?yōu)?em>隨機圖片。但我有8個按鈕和8個圖片,我想鏈接他們,這樣每個按鈕去與相同的圖片整個游戲。
附注:英語不是我的母語。
推薦答案
為了將按鈕和圖片相關(guān)聯(lián),最好在它們之間建立映射。您可以使用類似的內(nèi)容。
Map<JButton, ImageIcon>
以上是按鈕和圖標之間的一種非常粗略的關(guān)系。你可能不得不在這件事上即興發(fā)揮。像這樣的事情..
圖像來源:對于foto1到foto4,我從Stackoverflow中獲取了前4名用戶的頭像。
ImageIcon photo1 = new ImageIcon("foto1.jpg");
ImageIcon photo2 = new ImageIcon("foto2.jpg");
ImageIcon photo3 = new ImageIcon("foto3.jpg");
ImageIcon photo4 = new ImageIcon("foto4.jpg");
ImageIcon photo1copy = new ImageIcon("foto1.jpg");
ImageIcon photo2copy = new ImageIcon("foto2.jpg");
ImageIcon photo3copy = new ImageIcon("foto3.jpg");
ImageIcon photo4copy = new ImageIcon("foto4.jpg");
Map<JButton, ImageIcon> buttonImage = new HashMap<JButton, ImageIcon>();
public MemoriinFrame() {
setTitle("Memory Game");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
setLayout(new GridLayout(2, 4));
for(int i = 0; i <= 7; i++) {
button[i] = new JButton();
button[i].setIcon(tail);
button[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
performActionEventHandler((JButton)e.getSource());
}
});
add(button[i]);
}
addIcons();
}
public void performActionEventHandler(JButton clickedButton) {
clickedButton.setIcon(buttonImage.get(clickedButton));
}
public void addIcons() {
icons.add(photo1);
icons.add(photo2);
icons.add(photo3);
icons.add(photo4);
icons.add(photo1copy);
icons.add(photo2copy);
icons.add(photo3copy);
icons.add(photo4copy);
Collections.shuffle(icons);
for(int i=0;i<icons.size();i++){
buttonImage.put(button[i], icons.get(i));
}
}
注意:這不是一個完全沒有錯誤的答案,因為我只是在玩弄它。而且它還有很大的重構(gòu)余地。但這應(yīng)該足以讓你振作起來。
這篇關(guān)于在Java中使用監(jiān)聽器將按鈕鏈接到圖片的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,