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

标签 java swing actionlistener

这是我的第一个与学校无关的项目。我有几个问题,希望你们能轻松回答。我有 3 个问题。如何将我的按钮添加到我的 JFrame,即使它与按钮属于不同的类?

此外,我将如何制作我的形状和其他十个喜欢它的形状,彼此相隔大约四分之一秒,所以我有一行。

那么,我将如何强制他们遵循预先确定的路径,该路径可以扩展到有人拖着箱子来回移动?

非常感谢大家阅读并帮助我。这是我的三个类(class):

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");
}
}

敌人.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();
    }

}

按钮.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

}
}

最佳答案

如果您只想使用 JFrame 创建一个您希望添加到另一个 GUI 的 JButton,则按钮不应该扩展 JFrame。相反,也许给它一个名为 getShoot() 的公共(public)方法,该方法返回创建的按钮:

   public JButton getShoot() {
      return shoot;
   }

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

接下来,您需要阅读有关如何使用布局管理器的 Swing 教程部分,以便您可以将复杂的组件组合添加到 GUI 并让它们很好地组合在一起:Laying out Components in a Container

最后,至于这个:

Then, how would I force them to follow a predetermined path that scales to somebody dragging the box around?

你必须更好地描述这一点,以便我理解你想要做什么。

关于java - 帮助创建带有动画的复杂 Swing GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6318915/

相关文章:

java - Spring @async 复制 session

java - 为什么我不能在 JFrame 上调用 add() 而必须在容器上调用它?

java - 为车辆陈列室实现 GUI

java - 多输出问题JRadioButton,默认选择,else if,ActionListener

java - int argb color 输出奇怪的值

java - 除了 Java 属性之外,还有其他方法可以保存树状数据吗?

java - Java中字符串到整数的解决方案

java - 即使选择了 JTextField,箭头键 KeyBindings 仍然有效

java - Swing 面板可调整间隙

java - 将 JPanel 添加到 ActionListener