Помогите с созданием сложного Swing GUI с анимацией - PullRequest
2 голосов
/ 12 июня 2011

Это моя первая внешкольная программа. У меня есть несколько вопросов, на которые вы, ребята, можете легко ответить. У меня есть 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 ]

1 голос
/ 12 июня 2011

Кнопки не должны расширять JFrame, если все, что вы хотите сделать, это использовать его для создания JButton, который вы хотите добавить в другой графический интерфейс. Вместо этого, возможно, предоставьте ему открытый метод getShoot (), который возвращает созданную кнопку:

   public JButton getShoot() {
      return shoot;
   }

Далее, чтобы делать вещи по времени, вы должны использовать таймер Swing. Обучающие программы расскажут вам, как это сделать: Как использовать Swing Timers

Далее вы захотите прочитать учебное пособие по Swing о том, как использовать менеджеры компоновки, чтобы вы могли добавить сложное сочетание компонентов в графический интерфейс и совместить их все: Размещение компонентов в контейнере

Наконец, что касается этого:

Тогда, как бы я заставил их следовать по заранее определенному пути, который масштабируется, чтобы кто-то перетаскивал коробку вокруг?

Вам придется описать это лучше, чтобы я понял, что вы пытаетесь сделать.

0 голосов
/ 12 июня 2011

Для предопределенного пути, вы, вероятно, должны иметь их перемещение / размер сами пропорционально панели вмещения. С менеджером по расположению, предполагая, что они находятся внутри их собственной JPanel, панель должна автоматически масштабироваться, поэтому, когда размер окна изменяется, размеры изменяются и перемещаются должным образом.

...