廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 3690 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
skygp
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x104
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[Java] 有許多地方看不懂 因為java沒學好
我知道這裡是討論區
不是幫我做功課的地方
但是老師拿了這個程式要我自己看
由於java根本就不好
縱使有註解也看不是很懂
如果可以請告訴我這個程式是怎麼跑的
哪些程式是做什麼的

他的執行結果就有點類似貪食蛇那種遊戲

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class LogoAnimator extends JPanel implements ActionListener {

protected ImageIcon img[] = new ImageIcon;

private Timer animationTimer;
int x=100, y=100, x1=300, y1=300;
static int check,key='X'
static KeyHandler keyHdlr;


public LogoAnimator()
{
img = new ImageIcon("01.gif");
img = new ImageIcon("05-1.gif");
keyHdlr = new KeyHandler();
}


private class KeyHandler extends KeyAdapter {

public void keyPressed( KeyEvent e )
{
key = e.getKeyCode();
System.out.println("Get key " + key );
}
}


public void paintComponent( Graphics g )
{
super.paintComponent( g );

img.pa ..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容




獻花 x0 回到頂端 [樓 主] From:台灣中華電信 | Posted:2006-05-02 13:27 |
ety 手機
數位造型
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x719
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

討論區不能幫忙做功課呀!? 這我不清楚...
不過, 你的功課是說明程式, 因為看不懂才拿來這兒問的, 我想這也算是一種"問題討論"才是。

相信討論區中有人是專攻 Java 的, 期待他的出現與補充吧。
我很久沒接觸 Java 了, 大致地看了一下, 或許無法說明得太詳盡, 請多多包涵!

首先, 讓我們來看看宣告。
public class LogoAnimator extends JPanel implements ActionListener,
這一行可以看出, 他是一種有 GUI 介面的程式, 因為有繼承 "JPanel"。至於 ActionListener, 表示這程示會監聽使用者的回應, 類是滑鼠啦, 或是鍵盤之類的動作。

接下來要真正進入程式了, 先找到 main() 這個方法, 因為這是程式的進入點。每個程式皆是如此的。

複製程式
  public static void main( String args[] )
  {
    LogoAnimator animation = new LogoAnimator(); 

    JFrame window = new JFrame( "Animator test" ); 
    window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

    Container container = window.getContentPane();
    container.add( animation );
    window.addKeyListener( animation.keyHdlr );

    window.pack(); 
    window.setVisible( true );   
    animation.startAnimation(); 

  } 

LogoAnimator animation = new LogoAnimator(); <- 這裡是去呼叫一個程式, 呼叫的方法就是先宣告一個物件, 這個物件會拷貝那個要呼叫的程式碼, 而 new 則是真正的執行, 這時, 那程式裡的建構子會先執行。 這個程式應該算是 "Recursive" 結構, 也就是自己呼叫自己的這種結構。

再來看看建構子。建構子是拿來初始化的, 所以不應該有任何的程式動作。大部份是拿來設定一些數值用的。

複製程式
  public LogoAnimator()
  {
         img[0] = new ImageIcon("01.gif");
     img[1] = new ImageIcon("05-1.gif");
    keyHdlr = new KeyHandler();
  }

看完了建構子, 可以發現, 它是在設定img[0], img[1], 還有 keyHdlr 這三個變數的值。其中 KeyHdlr 是去 new 一個 KeyHandler 程式。內容是鍵盤偵測的命令, 和 new LogoAnimator() 的手法相似。 所以, 往後只要呼叫到 keyHdlr, 它都會去執行下面這些程式碼。

複製程式
  private class KeyHandler extends KeyAdapter {

          public void keyPressed( KeyEvent e )
          { 
            key = e.getKeyCode();
            System.out.println("Get key " + key );
          }
  }

這些程式碼, 看起來很簡單。 就是讀取鍵盤的輸入, 再輸出 "Get key " 加上鍵盤的輸入, 就這樣簡單。

接下來, 回到 main(), 看看後續的命令。

JFrame window = new JFrame( "Animator test" );

這是去創造一個 Frame GUI 的命令, 而標題是 "Animator test"。 以前都是用 awt 去實作的, 現在流行 Swing。 如何分辨呢? 通常有個大寫J字開頭的算 Swing。 印象中, awt 比較需要作業系統的支援, 所以相同的 awt 程式在不同的作業系統上, 看到的可能不太相同。 至於 Swing 的則是比較不會有這種情況, 所以建議大家多多用 Swing 來寫 GUI 介面。

離題了... 來看下面的命令吧!

window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 這是宣告這 GUI 的關閉方式, 按下視窗右上角的X鈕即可關閉。

Container container = window.getContentPane(); 在我的印象中, container 是一種視窗元件的抽象類別, 所以一般來說不能直接用它, 但可以去用它的一些子類別。 我也不知道該怎麼去形容它, 你可以把它想成是一種容器, 等等程式應該會把某些視窗元件往這裡丟才是, 我們往下看看吧。

container.add( animation ); 果然沒錯, 寫這程式的人把 animation 這玩意兒丟了進去。 還記得嗎? 程式一開始就 new 了個 LogoAnimator 物件, 那物件的名稱就叫 animation。 所以, 這行命令的意思就是將那物件的回傳值交給 Container 來處理。

window.addKeyListener( animation.keyHdlr ); 這一行則是呼叫所謂的 System call ... 我也不確定, 請你自己問同學查證吧, 我猜這應該算是 System call。 不管是不是, 可以確定的是, 這命令的目的是要作業系統去監聽使用者的鍵盤動作。

window.pack(); 應該是讓程式自己去設定介面大小吧 ... 這我也不確定, 也請你自己問一下同學囉!

window.setVisible( true ); 這命令是設定這元件為可視的, 可以看見的。

animation.startAnimation(); 重點來了, 之前都算是設定, 這裡才真正開始執行你設計的 Game 了。

我們來看看 startAnimation():

複製程式
  public void startAnimation()
  {
    if ( animationTimer == null ) {
      animationTimer = new Timer( 100, this );
      animationTimer.start();
    }
    else 
      if ( ! animationTimer.isRunning() )
        animationTimer.restart();
  }

大概的意思是, 如果還沒開始就設定開始, 若開始了則去辨識是否在正執行了? 若沒有就再執行一次。



其它的程式碼都算是 GUI 的設定, 我很多都看不懂, 因為我很少寫 GUI 的程式, 希望您見諒, 不過, 那些設定的程式, 我想你應該問得到人才對, 同學應該會。 至於程式走向, 流程, 就如我剛的說法, 你解釋給老師看看, 說不定老師會睜一隻眼閉一隻眼讓你過了呢!


我想我應該已經幫你把不懂的範圍縮小了才是 ... 總之, 加油 ~ 有不懂的再來發問看看!

^_^


獻花 x1 回到頂端 [1 樓] From:台灣和信超媒體 | Posted:2006-05-05 23:37 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.052144 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言