我创建了2个JButtons.One中的一个具有按钮功能,另一个处理图像。我希望在单击此按钮时更改该图像。所以插入方法repaint()并添加一个监听器第一个改变图像的JButton。当试图将侦听器或事件处理程序添加到第一个JButton时没有任何事情发生。因此图像不会改变。任何人都可以告诉我如何以其工作方式插入此侦听器(单击按钮时更改图像)?这是我的代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.*;
import java.util.Random;
public class Back extends JFrame{
private Random ran;
private int value;
private JButton r;
private JButton c;
public Back(){
super("title");
ran = new Random();
value = nextValue();
setLayout(new FlowLayout());
r=new JButton("ROLL");
add(r);
Icon i=new ImageIcon(getClass().getResource("1.png"));
Icon img=new ImageIcon(getClass().getResource("2.png"));
c= new JButton(i);
if (value==1){
c= new JButton(i);
}
else if(value==2){
c= new JButton(img);
}
add(c);
thehandler hand=new thehandler(this);//konstruktori i handler merr nje instance te Background
r.addActionListener(hand);
c.addActionListener(hand);
}
private int nextValue() {
return Math.abs(ran.nextInt()) % 6 + 1 ;
}
public void roll() {
value = nextValue() ;
repaint() ;
}
public int getValue() {
return value ;
}
private class thehandler implements ActionListener{
private Back d;
thehandler(Back thisone) {
d = thisone ; }
public void actionPerformed(ActionEvent event) {
d.roll() ;
}
}
public static void main(String[] args) {
Back d = new Back() ;
d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
d.getContentPane().setBackground(Color.GREEN);
d.setSize(700,500);
d.setVisible(true);
}
}
答案 0 :(得分:1)
所以,基本上,你所有的代码都归结到这里......
public void roll() {
value = nextValue();
repaint();
}
这会计算一个新的随机值并调用重绘。但是,value
在你的代码中没有任何内容会被调用。
相反,您需要更新某些控件的状态,可能更像是......
public void roll() {
value = nextValue();
Icon i = new ImageIcon(getClass().getResource("1.png"));
Icon img = new ImageIcon(getClass().getResource("2.png"));
if (value == 1) {
c.setIcon(i);
} else if (value == 2) {
c.setIcon(img);
}
}
我要做的下一件事是将所有图像存储在某种数组或List
中以便于访问,然后您可以简单地执行某些操作
像...
public void roll() {
value = nextValue();
c.setIcon(listOfImages.get(value - 1));
}
可能需要查看Java Swing Timer and Animation: how to put it together以获取更详细的示例