2015-06-20 75 views
0

我正在嘗試開發一個簡單的遊戲。遊戲是關於形狀的。形狀會移動,我們會通過鼠標捕捉。我已經創建了一個橢圓形和給定尺寸的橢圓形圖形。但我無法反覆移動這個形狀。我想我需要使用計時器課。我一直在嘗試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(); 
+1

*「actionPerformed()方法,但我不能反覆提出這個形狀。我想我需要使用Timer類「*是的。看一下你的代碼,看起來它需要使用'panel'實例來建立一個Swing'Timer'。提示:1)源代碼中的單個空白行是需要的*。 '{'之後或'}'之前的空行通常也是多餘的。 2)使用合乎邏輯的一致形式縮進代碼行和塊。縮進旨在使代碼的流程更易於遵循! –

+0

'l.setLayout(null);'Java GUI必須在不同的操作系統上工作',屏幕大小,屏幕分辨率等等,使用不同語言環境中的不同PLAF。因此,它們不利於像素的完美佈局。請使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及[white space]的佈局填充和邊框(http://stackoverflow.com/a/17874718/ 418556)。 –

+0

是的,我會按照你的提示非常感謝你 –

回答

3

添加這樣的事情

javax.swing.Timer timer=new javax.swing.Timer(100, panel) ; 
timer.start(); 

每100毫秒的timer調用你的MyPanel

+0

Okey男人。它正在工作。非常感謝你的旅行。你能解釋一下爲什麼我必須使用javax.swing嗎?正如我寫的,我正在嘗試Timer t = new Timer(100,panel); t.start();但我錯了,爲什麼? –

+0

現在我也明白了。我輸入了錯誤的軟件包。我必須導入javax.swing.Timer;而不是java.util.Timer; –