我正在尝试一个简单的应用程序,它可以选择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);
}
}发布于 2014-10-01 13:55:18
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(); )本地访问这些按钮的。
另外,如果您继续在本地创建所有对象,则随着应用程序的增长,构造函数将变得相当大。您可能需要考虑使用一些类成员。也许可以创建作为类成员的按钮。然后有一个方法reset(),它将使用新的随机图标初始化按钮。首先,这将消除重复的代码,就像在本例中,您使用两组代码来做完全相同的事情。相反,只需调用该方法。一次,在构造函数中首先初始化它们,然后在重置侦听器中再次调用它。
还可以使用Java命名约定。类名以大写字母开头。rest -> Rest
https://stackoverflow.com/questions/26142280
复制相似问题