欢迎访问宙启技术站
智能推送

使用javax.swing实现动态图形效果

发布时间:2023-12-23 02:43:53

javax.swing是Java中用于创建图形用户界面(GUI)的框架。它包含了一系列的类和方法,可以用于创建窗口、按钮、文本框等组件,并且可以对这些组件进行操作和事件处理。在javax.swing中,可以实现各种动态图形效果,如动画、转场效果等。

下面我们来看一个使用javax.swing实现动态图形效果的例子:实现一个跳动的小球。在这个例子中,我们将创建一个窗口,并在窗口中绘制一个小球。然后通过定时器不断改变小球的位置,实现小球的跳动效果。

首先,我们需要引入javax.swing中的相关类:

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

然后,创建一个继承自JPanel的类BallPanel,用于绘制小球:

public class BallPanel extends JPanel {
    private int x = 0;
    private int y = 0;
    private int dx = 1;
    private int dy = 1;
    
    public BallPanel() {
        Timer timer = new Timer(10, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                moveBall();
            }
        });
        timer.start();
    }
    
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.RED);
        g.fillOval(x, y, 50, 50);
    }
    
    private void moveBall() {
        x += dx;
        y += dy;
        
        if (x < 0 || x > getWidth() - 50) {
            dx = -dx;
        }
        
        if (y < 0 || y > getHeight() - 50) {
            dy = -dy;
        }
        
        repaint();
    }
    
    public Dimension getPreferredSize() {
        return new Dimension(400, 400);
    }
}

在BallPanel类中,我们定义了小球的坐标x和y,用于表示小球的位置。dx和dy表示小球在x和y方向上的速度。在构造方法中,我们创建了一个定时器Timer,并指定每10毫秒执行一次actionPerformed方法。在actionPerformed方法中,我们调用moveBall方法,用于移动小球的位置。在paintComponent方法中,我们使用Graphics的fillOval方法绘制小球。在moveBall方法中,我们首先改变小球的坐标,然后判断小球是否超出窗口边界,如果超出,则改变小球的速度方向。最后,我们调用repaint方法重绘界面。

最后,创建一个继承自JFrame的类BallFrame,用于显示窗口:

public class BallFrame extends JFrame {
    public BallFrame() {
        setTitle("Jumping Ball");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        BallPanel ballPanel = new BallPanel();
        getContentPane().add(ballPanel);
        
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new BallFrame();
            }
        });
    }
}

在BallFrame类中,我们设置窗口的标题和关闭操作,并创建一个BallPanel对象,并将其添加到窗口中。然后调用pack方法对窗口进行布局,并使用setLocationRelativeTo方法将窗口居中显示,并设置窗口可见。

最后,我们在main方法中使用SwingUtilities的invokeLater方法,在事件分派线程中创建并显示窗口。

现在我们可以编译并运行程序,看到小球在窗口中跳动的效果。

这个例子展示了如何使用javax.swing实现动态图形效果。通过使用定时器和重绘界面的方式,我们可以不断改变组件的属性,从而实现动态效果。在实际应用中,我们可以根据需求,自定义各种不同的动态图形效果,如一组连续的图片切换、渐变动画等。