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

问题描述

| 这是我第一个与学校无关的课程。我有几个问题,希望您可以轻松回答。我有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\");
}
}
敌人.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

}
}
    

解决方法

        如果您只想使用JFrame创建要添加到另一个GUI的JButton,则按钮不应扩展JFrame。相反,也许给它一个名为getShoot()的公共方法,该方法返回创建的按钮:
   public JButton getShoot() {
      return shoot;
   }
接下来,要以定时方式执行操作,应使用Swing计时器。本教程将告诉您如何执行此操作:如何使用Swing计时器 接下来,您将需要阅读有关如何使用布局管理器的Swing教程部分,以便可以将复杂的组件混合添加到GUI中,并使所有组件都能很好地组合在一起:将组件放置在容器中 最后,至此:   然后,我将如何迫使他们遵循预定的路径,该路径会随着有人拖动盒子而变化? 您必须为我更好地描述这一点,以了解您要执行的操作。     ,        对于预定路径,您可能应该使它们按照包含窗格的比例移动/调整大小。使用布局管理器,假设它们位于自己的JPanel中,则窗格应自动缩放,因此,当调整窗口大小时,形状将调整大小并正确移动。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...