我正在嘗試開發一個簡單的遊戲。遊戲是關於形狀的。形狀會移動,我們會通過鼠標捕捉。我已經創建了一個橢圓形和給定尺寸的橢圓形圖形。但我無法反覆移動這個形狀。我想我需要使用計時器課。我一直在嘗試2個小時,但我還沒有做。如何移動JFrame形狀
該代碼;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class myshapestry extends JFrame implements ActionListener {
JFrame frame=new JFrame("Deneme");
Container l ;
private static int ballX=150;
private static int ballY=150;
myshapestry() {
l=this.getContentPane();
l.setLayout(null);
MyPanel panel=new MyPanel();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.add(panel);
frame.setVisible(true);
frame.setSize(getPreferredSize());``
}
public Dimension getPreferredSize() {
return new Dimension(500,600);
}
public static void main (String args[]){
myshapestry tr=new myshapestry();
tr.setTitle("Game of Shapes");
}
private static class MyPanel extends JPanel {
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.fillOval(ballX, ballY,50 , 70);
}
public void actionPerformed(ActionEvent e){
ballX = ballX + 5;
ballY = ballY + 10;
repaint();
}
}
}
我正在嘗試這些代碼在myshapestry代碼塊;
Timer timer=new Timer(100,myshapestry);
t.start();
*「
actionPerformed()
方法,但我不能反覆提出這個形狀。我想我需要使用Timer類「*是的。看一下你的代碼,看起來它需要使用'panel'實例來建立一個Swing'Timer'。提示:1)源代碼中的單個空白行是需要的*。 '{'之後或'}'之前的空行通常也是多餘的。 2)使用合乎邏輯的一致形式縮進代碼行和塊。縮進旨在使代碼的流程更易於遵循! –'l.setLayout(null);'Java GUI必須在不同的操作系統上工作',屏幕大小,屏幕分辨率等等,使用不同語言環境中的不同PLAF。因此,它們不利於像素的完美佈局。請使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及[white space]的佈局填充和邊框(http://stackoverflow.com/a/17874718/ 418556)。 –
是的,我會按照你的提示非常感謝你 –