帮助创建带动画的复杂Swing GUI

时间:2011-06-11 22:31:50

标签: java swing actionlistener

这是我的第一份非学校相关课程。我有几个问题,你们可以轻松回答。我有3个问题。如何将我的按钮添加到我的JFrame,即使它与按钮不同?

另外,我将如何制作自己的形状和其他十个像我一样的大约四分之一秒,所以我有一条线。

然后,我怎么强迫他们按照预定的路径扩展到某人拖动箱子?

非常感谢阅读和帮助我的人。这是我的三个班级:

gameRunner.java

import javax.swing.JFrame;

public class gameRunner {
public static void main(String args []){
    Enemy e = new Enemy();
    Buttons b = new Buttons();
    JFrame f = new JFrame();
    f.add(b);
    f.add(e);
    f.setVisible(true);
    f.setSize(1300, 700);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setTitle("Tower Defense");
}
}

Enemy.java

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Rectangle2D;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Enemy extends JPanel implements ActionListener {

    Timer t = new Timer(5, this);

    double x = 0;
    double y = 0;
    double velX = 3;
    double velY = .5;

    int health = 10;

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        Rectangle2D square = new Rectangle2D.Double(x, y, 10, 10);
        g2.fill(square);
        t.start();
    }

    public double adjustHorizontalSpeed() {
        y += velY;
        return y;
    }

    public double adjustVerticalSpeed() {
        x += velX;
        return x;
    }

    public void actionPerformed(ActionEvent e) {
        adjustHorizontalSpeed();
        adjustVerticalSpeed();
        repaint();
    }

}

Buttons.java

import java.awt.*;
import java.awt.event.*;

import javax.swing.JButton;
import javax.swing.JFrame;


public class Buttons extends JFrame implements ActionListener{

    private JButton shoot;


public Buttons(){
    shoot = new JButton("Shoot!");
    shoot.setBounds(50,60,50,100);
    shoot.addActionListener(this);
}


@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub

}
}

2 个答案:

答案 0 :(得分:1)

如果你想要做的就是使用它来创建一个你想要添加到另一个GUI的JButton,那么按钮不应该扩展JFrame。相反,也许给它一个名为getShoot()的公共方法,它返回创建的按钮:

   public JButton getShoot() {
      return shoot;
   }

接下来,要以定时方式执行操作,您应该使用Swing Timer。教程将告诉您如何执行此操作:How to use Swing Timers

接下来,您将要阅读有关如何使用布局管理器的Swing教程部分,以便您可以向GUI添加复杂的组件组合,并使它们完全匹配:Laying out Components in a Container

最后,至于:

  

然后,我怎么强迫他们按照预定的路径扩展到某人拖动箱子?

你必须更好地描述这一点,以便了解你正在尝试做什么。

答案 1 :(得分:0)

对于预定路径,您可能应该让它们自动移动/调整大小与包含窗格成比例。使用布局管理器,假设它们位于自己的JPanel中,窗格应自动缩放,因此在调整窗口大小时,形状将调整大小并正确移动。