Java 使用按钮事件处理程序刷新图像面板
我试图用“刷新”按钮刷新图标面板,但无法确定在事件处理程序中放置什么来执行此任务。我只有执行一次任务的代码(如下)。有人能帮我吗Java 使用按钮事件处理程序刷新图像面板,java,swing,event-handling,Java,Swing,Event Handling,我试图用“刷新”按钮刷新图标面板,但无法确定在事件处理程序中放置什么来执行此任务。我只有执行一次任务的代码(如下)。有人能帮我吗 import javax.swing.*; import java.awt.event.*; import java.awt.*; public class FourRandomCards extends JFrame { JButton jbtRefresh = new JButton("Refresh"); CardsPanel cardsPan
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class FourRandomCards extends JFrame {
JButton jbtRefresh = new JButton("Refresh");
CardsPanel cardsPanel = new CardsPanel();
public FourRandomCards() {
add(cardsPanel, BorderLayout.CENTER);
add(jbtRefresh, BorderLayout.SOUTH);
//=============================================================
/** can't figure out what to put in event-handler **/
jbtRefresh.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
//=============================================================
}
public static void main(String[] args) {
JFrame frame = new FourRandomCards();
frame.setTitle("Four Random Cards");
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private class CardsPanel extends JPanel {
public CardsPanel() {
for (int i = 0; i < 4; i++) {
int card = (int)(Math.random() * 54 + 1);
ImageIcon cardIcon = new ImageIcon
("image/card/" + card + ".png");
JLabel jlblCard = new JLabel(cardIcon);
add(jlblCard);
}
}
}
}
import javax.swing.*;
导入java.awt.event.*;
导入java.awt.*;
公共类FourRandomCards扩展了JFrame{
JButton jbtRefresh=新JButton(“刷新”);
CardsPanel CardsPanel=新的CardsPanel();
公共信用卡(){
添加(cardsPanel、BorderLayout.CENTER);
添加(jbtRefresh,BorderLayout.SOUTH);
//=============================================================
/**无法确定在事件处理程序中放置什么**/
jbtRefresh.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
}
});
//=============================================================
}
公共静态void main(字符串[]args){
JFrame frame=新的四张随机卡();
frame.setTitle(“四张随机卡片”);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
私有类CardsPanel扩展了JPanel{
公共卡spanel(){
对于(int i=0;i<4;i++){
int card=(int)(Math.random()*54+1);
ImageIcon cardIcon=新的ImageIcon
(“图像/卡片/“+卡片+”.png”);
JLabel jlblCard=新JLabel(cardIcon);
添加(jlblCard);
}
}
}
}
基本上,您需要删除所有现有组件并重新添加它们。这意味着您需要一些能够满足此要求的方法
因为您使用的是局部变量,所以您将无法访问cardsPanel
变量,除非将其设置为final
或使用类实例变量
public class FourRandomCards extends JFrame {
JButton jbtRefresh = new JButton("Refresh");
final CardsPanel cardsPanel = new CardsPanel();
public FourRandomCards() {
add(cardsPanel, BorderLayout.CENTER);
add(jbtRefresh, BorderLayout.SOUTH);
//=============================================================
/** can't figure out what to put in event-handler **/
jbtRefresh.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cardsPanel.refresh();
}
});
//=============================================================
}
public static void main(String[] args) {
JFrame frame = new FourRandomCards();
frame.setTitle("Four Random Cards");
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private class CardsPanel extends JPanel {
public CardsPanel() {
refresh();
}
public void refresh() {
removeAll();
for (int i = 0; i < 4; i++) {
int card = (int)(Math.random() * 54 + 1);
ImageIcon cardIcon = new ImageIcon
("image/card/" + card + ".png");
JLabel jlblCard = new JLabel(cardIcon);
add(jlblCard);
}
revalidate();
repaint();
}
}
}
public类fourrandom扩展JFrame{
JButton jbtRefresh=新JButton(“刷新”);
最终卡片spanel CardsPanel=新卡片span();
公共信用卡(){
添加(cardsPanel、BorderLayout.CENTER);
添加(jbtRefresh,BorderLayout.SOUTH);
//=============================================================
/**无法确定在事件处理程序中放置什么**/
jbtRefresh.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
cardsPanel.refresh();
}
});
//=============================================================
}
公共静态void main(字符串[]args){
JFrame frame=新的四张随机卡();
frame.setTitle(“四张随机卡片”);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
私有类CardsPanel扩展了JPanel{
公共卡spanel(){
刷新();
}
公共无效刷新(){
removeAll();
对于(int i=0;i<4;i++){
int card=(int)(Math.random()*54+1);
ImageIcon cardIcon=新的ImageIcon
(“图像/卡片/“+卡片+”.png”);
JLabel jlblCard=新JLabel(cardIcon);
添加(jlblCard);
}
重新验证();
重新油漆();
}
}
}
我假设您要删除所有当前标签并重新加载它们?