移动Java Swing图形

时间:2014-06-11 14:57:39

标签: java swing graphics

我想重新创建一个用Python制作的游戏,在学习了Swing的基础知识后,我开始绘制图形。现在我被卡住了。我创建了一个黑色方块,并希望将其坐标向右移动10。我想要的是能够通过移动方块来制作动画并能够响应用户的动作。现在我想要的只是在创建窗口时(现在),在运行时将正方形重绘为右边10个像素。

在Python Tkinter中,这很简单:

square = myCanvas.create_rectangle(10, 10, 20, 20)

然后在代码中,我会这样做:

x = 10
while True:
    x = x + 10
    myCanvas.coords(square, x, y, x+10, y+20)
    time.sleep(0.1)
    myMainWindow.update()

它会将广场向右移动。

这是我的Java代码:

package tutorial2;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Tutorial2 {

    public static void main(String[] args) {
        make_gui();
    }
    static void make_gui(){
        JFrame f = new JFrame("My Window");
        f.getContentPane().setPreferredSize(new Dimension(500, 300));

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new MyPanel());
        f.pack();
        f.setVisible(true);
    }
}

class MyRectangle extends Rectangle{
    Rectangle self;
    int x;
    int y;
    public MyRectangle(int x, int y){
          this.x = x;
          this.y = y;
          this.self = new Rectangle(this.x, this.y, this.x+10, this.y+10);
    }

}

class MyPanel extends JPanel{
    MyRectangle user = new MyRectangle(10, 10);
    Rectangle user2 = new Rectangle(30, 30, 40, 40);
    public MyPanel(){

    };

    public void paintComponent(Graphics g){
        Graphics2D graphics2d = (Graphics2D) g;
        //graphics2d.fill(user2);
        graphics2d.fill(user.self);
    }
}

我如何在这里完成?

3 个答案:

答案 0 :(得分:0)

只需使用:

g.drawRect(x1,y1,width,height);

或者:

g.fillRect(x1,y1,width,height);

您不需要Rectangle个对象或您自己的MyRectangle个对象。

您可以存储坐标并每帧更新它们。

答案 1 :(得分:0)

更新:现在通过IDE。该课程应该是可编辑的

当然有一个Rectangle类,但包括绘制和移动方法。

class MyRectangle {

    int x;
    int y;
    int width;
    int height;

    public MyRectangle(int x, int y, int w, int h) {
        this.x = x;
        this.y = y;
        this.width = w;
        this.height = h;
    }

    public void draw(Graphics g) {
        g.drawRect(x, y, width, height);
    }

    public void makeBigger(int value) {
        width = width + value;
        height = height + value;
    }
}

您只需创建对象,然后从面板或其他组件(如画布)循环调用它。

例如,您可以覆盖面板中的paintComponent(..)方法,并使用线程或计时器在循环中创建动画。

class myPanel extends JPanel{


    MyRectangle r = new MyRectangle(10,10,10,10);

    @Override
    protected void paintComponent(Graphics g) {

        r.makeBigger(10);
        r.draw(g);
    }

}

此面板必须在计时器操作中重新绘制,或者可以添加到按钮操作中。动作代码看起来像是:

public void actionPerformed(ActionEvent e) {
    myPanel.repaint();
}

答案 2 :(得分:-2)

最好还是使用图形库为您完成此操作。如果你想制作你的游戏,你应该观看youtube视频,了解游戏应用程序的基础知识,你就可以轻松搞定。