gpt4 book ai didi

java - 使用 JButton ActionListener 刷新 jFrame

转载 作者:行者123 更新时间:2023-12-01 12:28:23 24 4
gpt4 key购买 nike

我正在尝试一个简单的应用程序,它会选择 4 张随机卡并将它们显示在 4 个按钮上,到目前为止一切都很好,我想添加一个刷新按钮,每次调用它时都会刷新随机部分,但我可以没有完成我尝试了 revalidate();repaint(); 但没有成功。
我希望有人可以帮助我,提前致谢。

    import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class rest extends JFrame{
public rest(){
int x=(int)(Math.random()*55);
int y=(int)(Math.random()*55);
int z=(int)(Math.random()*55);
int b=(int)(Math.random()*55);
ImageIcon i1= new ImageIcon("image/card/"+x+".png");
ImageIcon i2= new ImageIcon("image/card/"+y+".png");
ImageIcon i3= new ImageIcon("image/card/"+z+".png");
ImageIcon i4= new ImageIcon("image/card/"+b+".png");
JButton b1 = new JButton();
b1.setIcon(i1);
JButton b2 = new JButton();
b2.setIcon(i2);
JButton b3 = new JButton();
b3.setIcon(i3);
JButton b4 = new JButton();
b4.setIcon(i4);
JPanel p = new JPanel();
p.setLayout(new GridLayout(1,4,5,5));
p.add(b1);
p.add(b2);
p.add(b3);
p.add(b4);
JPanel p1= new JPanel();
JButton b5 = new JButton("refresh");
p1.setLayout(new BorderLayout());
p1.add(b5,BorderLayout.EAST);
setLayout(new BorderLayout());
add(p,BorderLayout.CENTER);
add(p1,BorderLayout.SOUTH);
b5.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
//revalidate();
//repaint();
}
});
}

public static void main(String[] args) {
rest f= new rest();
f.setTitle("poker");
f.setSize(300,300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
f.setVisible(true);

}

}

最佳答案

revalidate/repaint 不会执行任何操作。您需要实际创建新的随机图标并再次将图标设置为按钮,例如

@Override
public void actionPerformed(ActionEvent e) {
int random = (int)(Math.random()*55);
b1.setIcon(new ImageIcon("image/card/"+random+".png"));
random = (int)(Math.random()*55);
b2.setIcon(new ImageIcon("image/card/"+random+".png"));
random = (int)(Math.random()*55);
b3.setIcon(new ImageIcon("image/card/"+random+".png"));
random = (int)(Math.random()*55);
b4.setIcon(new ImageIcon("image/card/"+random+".png"));
}

您还需要将按钮声明为 final,因为您是从匿名类在本地访问它们,即 final JButton b1 = new JButton();

<小时/>

顺便说一句,如果您继续在本地创建所有对象,那么随着应用程序的增长,您的构造函数将变得相当大。您可能需要考虑使用一些类(class)成员。也许将按钮创建为类成员。然后有一个方法 reset() ,它将使用新的随机图标初始化按钮。其一,这将消除重复的代码,就像在本例中一样,您使用两组代码来完成完全相同的事情。相反,只需调用该方法即可。一次,在构造函数中首先初始化它们,然后在重置监听器中再次调用它

还使用 Java 命名约定。类名以大写字母开头。 休息 -> 休息

关于java - 使用 JButton ActionListener 刷新 jFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26142280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com