我正在尝试根据for循环确定的坐标在一个按钮内设置一个矩形的动画。这是我的 JComponent
班级:
public class Rect extends JComponent {
public int x;
public int y;
public int w;
public int h;
public Rect (int x, int y, int w, int h) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
repaint();
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
super.paintComponent(g);
g2.setColor(Color.green);
g2.drawRect(x+15, y+15, w, h);
}
}
这是我的纽扣和 button
内部 JFrame
班级:
public class MainFrame extends JFrame {
Rect R = new Rect(15, 15, 50, 50);
JPanel lm = new JPanel();
LayoutManager lay = new OverlayLayout(lm);
JButton animate = new JButton("animate");
public MainFrame () {
setSize(1200, 700);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
lm.setLayout(lay);
lm.add(R);
}
animate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (int k = 0; k < 500; k+=50) {
R = new Rect(k, k, 50, 50);
validate();
repaint();
}
}
});
}
但是当我运行代码并单击按钮时,什么都没有发生。怎么了?
编辑:我在主类中运行框架,如下所示:
public class OrImage {
public static void main(String[] args) throws Exception
SwingUtilities.invokeLater(new Runnable() {
public void run() {
MainFrame mf = new MainFrame();
mf.setVisible(true);
}
});
}
}
1条答案
按热度按时间rn0zuynd1#
我改了班级代码
MainFrame
当你按下animate
巴顿,出事了,但我不知道你是不是想这样。我没有换班
Rect
我补充道main()
方法MainFrame
把所有的东西都放在一节课上。主要的变化是在方法上
actionPerformed()
. 你需要加上R
到JPanel
. 你需要打电话revalidate()
上JPanel
因为您更改了它包含的组件数。打过电话之后revalidate()
你应该打电话repaint()
(同样,在JPanel
)让它重新绘制自己。这是按下前的样子
animate
.这就是按压后的样子
animate
编辑
按要求-带动画。