广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 3688 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为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.072040 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言