1
我試圖讓它在一個框架中有兩個面板。一個顯示4張卡片,另一個顯示一個按鈕。當點擊按鈕時,隨機選擇四張牌。初始化程序或單擊刷新時,卡片不顯示。 任何人都可以解釋我做錯了什麼,我需要做什麼來解決這個問題?JPanel組件在嘗試刷新它們後消失
這裏是我的代碼
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class MyFrame extends JFrame{
public MyFrame(){
super("Random Cards");
CardPanel cardPanel = new CardPanel();
JPanel buttonPanel = new JPanel();
JButton jbtRefresh = new JButton("Refresh");
buttonPanel.add(jbtRefresh);
add(cardPanel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH);
jbtRefresh.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
cardPanel.refresh();
}
});
}
public static void main(String[] args){
MyFrame f = new MyFrame();
f.setDefaultCloseOperation(MyFrame.EXIT_ON_CLOSE);
f.setSize(500, 300);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public class CardPanel extends JPanel{
JLabel l1;
JLabel l2;
JLabel l3;
JLabel l4;
void CardPanel(){
refresh();
}
void refresh(){
l1 = new JLabel(new ImageIcon("image/card/" + (int)(1 + Math.random() * 54) + ".png"));
l2 = new JLabel(new ImageIcon("image/card/" + (int)(1 + Math.random() * 54) + ".png"));
l3 = new JLabel(new ImageIcon("image/card/" + (int)(1 + Math.random() * 54) + ".png"));
l4 = new JLabel(new ImageIcon("image/card/" + (int)(1 + Math.random() * 54) + ".png"));
removeAll();
add(l1);
add(l2);
add(l3);
add(l4);
repaint();
}
}
}
您將無法訪問'ActionListener'中的'cardPanel'變量。爲了做到這一點'cardPanel'必須是'final' – Titus 2015-01-21 00:10:15
你在說什麼? 'final'是一個常量修飾符。 – 2015-01-21 00:11:06
@Malik Brahimi他正試圖訪問'匿名內部類'中的變量。爲了做到這一點,變量必須是'final' – Titus 2015-01-21 00:31:05