从一段小程序重新认识自己

这次主要是看如果自己现在就开始动手写,最多能够写到哪一步,于是随便找了一个Clock 的代码,一边抄写一边理解,

这是我的学习方法,并不要求全部搞懂,但是每一步所完成的功能要知道,然后对照自己过去的编程经验,期望能够找到自己现在的水平在哪里!

下面是学习过程

import java.applet.*;

import java.awt.event.*;

import java.awt.*;

import javax.swing.*;

import java.util.*;

import java.io.*;

import java.awt.geom.*;

import java.awt.image.*;

public class Clock extends Applet implements Runnable, MouseListener,

ActionListener {

//写到这里发现这个Clock居然是Applet的子类,遇到看不明白的当然是手册伺候了,

//翻阅资料发现这个所谓Applet在JDKdom中的介绍为

//"是一种不适合单独运行但可嵌入在其他应用程序中的小程序。"完全看不懂

//而他的定义是public class Applet extends Panel ,^_^居然是Panel的子类

//这样我大概知道了这个Applet应该是一个容器类

//再看这家伙的方法,哇一大堆url,Image一看就是个html像,我心里合计,

//小样!别以为改了名字爷就认不 出你了。

//现在前面看明白了,implements就又有点不了了,决定先放一下,不求甚解从来就是

//本人的优良品德之一。

Image image,image1;

Toolkit tool;

JPanel panel;

Graphics gg;

int width,height,width1,height1;

Thread thread,thread2;

MediaTracker m;

double angel1=0,angel2=0;

int xsec,ysec,xsec2,ysec2,xmin,ymin,xmin2,ymin2,xhou,yhou,xhou2,yhou2;

int c = 0,xstr = 235,ystr = 253;

int y = ystr;

JButton button1 = new JButton();

JButton button2 = new JButton();

JButton button3 = new JButton();

JButton button4 = new JButton();

AudioClip music;

Color colorh = Color.GREEN,colorm= Color.BLACK,colors= Color.YELLOW;

String[] string = new String[5];

int kk = 0;

//上面一大堆罗里吧索的终于结束了

public void init()

{

//等会这个init咋那么眼熟,好像在哪里见过,哦。。。。。

//Applet方法成员之一,立即手册之,

//"由浏览器或 applet viewer 调用,通知此 applet 它已经加载到系统中。"

//看这个意思有点像把主对象容器初始化。

this.setLayout(new BorderLayout());

this.setBackground(Color.BLACK);

tool = getToolkit();

//到这里又看不懂了,怎么getToolkit()既没有对象也没有参数的,这样也可以啊!

//不管了接着看吧

image = tool.getImage("image.PNG");

//看吧PNG网页的东东来了吧

        m = new MediaTracker(this);

        m.addImage(image,0);

        try

        {

        m.waitForID(0);

        }

        catch(Exception e)

        {

        System.out.println(e.getMessage());

        }

//怎么多媒体也出来了,这个倒霉的程序员,没办法手册依旧

//MediaTracker 类是一个跟踪多种媒体对象状态的实用工具类

//要使用媒体跟踪器,需要创建一个 MediaTracker 实例,

//然后对每个要跟踪的图像调用其 addImage 方法。

//另外,还可以为每个图像分配一个惟一的标识符。

//此标识符可控制获取图像的优先级顺序。它还可用于标识可单独等待的惟一图像子集。

//具有较低 ID 的图像比具有较高 ID 的图像优先加载。

//这样后面的都大概看明白了,就是加载了一张图片。

//不由大呼,不愧是JAVA这样简单的操作也搞的如此复杂,偶喜欢。

        width1 = image.getWidth(this);

        height1 = image.getHeight(this);

        width = this.width;

        height = this.height;

//这两句有区别吗?

        this.addMouseListener(this);

//姑且认为是在主容器上添加一个作用于主容器的鼠标事件吧

        button1.setText("时针颜色");

        button1.addActionListener(this);

        button2.setText("分针颜色");

        button2.addActionListener(this);

        button3.setText("秒针颜色");

        button3.addActionListener(this);

        button4.setText("选择皮肤");

        button4.addActionListener(this);

        button1.setBackground(Color.BLACK);

        button1.setForeground(Color.WHITE);

        button2.setBackground(Color.BLACK);

        button2.setForeground(Color.WHITE);

        button3.setBackground(Color.BLACK);

        button3.setForeground(Color.WHITE);

        button4.setBackground(Color.BLACK);

        button4.setForeground(Color.WHITE);

//为什么Color后颜色成员有大小写区分哪?

        JPanel panel = new JPanel();

//手册:JPanel 是一般轻量级容器。不解

        panel.setBackground(Color.BLACK);

        panel.setLayout(new FlowLayout(FlowLayout.CENTER));

        panel.add(button1);

        panel.add(button2);

        panel.add(button3);

        panel.add(button4);

        this.setLayout(new BorderLayout());

        this.add(panel,BorderLayout.SOUTH);

        string[0] = "时间就像海绵里水";

        string[1] = "只要挤总会有的";

        string[2] = "珍惜身边每一个人";

        string[3] = "因为随着岁月流逝,";

        string[4] = "他们将......";

//你不当程序员你还想当诗人啊!

//我有这样想过啊

//省省吧,好好做你这个程序员这么有前途的职业去吧。

        image1 = createImage(getWidth(),getHeight()-35);

//又是一句没头没脑的东西。

        gg = image1.getGraphics();

}

public void start()

{

//亲娘耶,这就开始了?

        if (thread == null)

        {

        thread = new Thread(this);

        thread.start();

        }

        if (thread2 == null)

        {

        thread2 = new Thread(new thread2());

//new一个new的自己??

        thread2.start();

        }

}

public void paint(Graphics g)

{

super.paint(g);

g.drawImage(image1,0,0,this);

Date date = new Date();

int hour = date.getHours();

int min = date.getMinutes();

int sec = date.getSeconds();

String m = Integer.toString(hour)+":"+Integer.toString(min)+":"

  + Integer.toString(sec);

//好像这样也可以 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

//               String m = sdf.format(date);

        double ans = (Math.PI/30)*min;

        double anm = (3.1415926535897931D /30)*min;

        double anh = ((hour +min/60.0)*(2*Math.PI/12));

        xsec2 = 172 + (int) (45 * Math.sin(ans));

        ysec2 = 165 - (int) (45 * Math.cos(ans));

        xsec = 172 - (int) (13 * Math.sin(ans));

        ysec = 165 + (int) (13 * Math.cos(ans));

        xmin2 = 172 + (int) (40 * Math.sin(anm));

        ymin2 = 165 - (int) (40 * Math.cos(anm));

        xmin = 172 - (int) (10 * Math.sin(anm));

        ymin = 165 + (int) (10 * Math.cos(anm));

        xhou = 172 + (int) (30 * Math.sin(anh));

        yhou = 165 - (int) (30 * Math.cos(anh));

        xhou2 = 172 - (int) (10 * Math.sin(anh));

        yhou2 = 165 + (int) (10 * Math.cos(anh));

        g.setColor(colors); //秒针

        g.drawLine(xsec, ysec, xsec2, ysec2);

        g.setColor(colorm); //分针

        g.drawLine(xmin, ymin, xmin2, ymin2);

        g.setColor(colorh); //时针

        g.drawLine(xhou2, yhou2, xhou, yhou);

        g.setColor(Color.RED);

    g.fillOval(169,162,9,9);

    g.drawString(m,150,100);

    g.setColor(Color.RED);

    g.drawString(string[0], xstr, y);

        g.drawString(string[1], xstr, y + 20);

        g.drawString(string[2], xstr, y + 40);

        g.drawString(string[3], xstr, y + 60);

        g.drawString(string[4], xstr, y + 80);

}

public void update(Graphics g)

{

paint(g);

}

/**

* Method main

*

*

* @param args

*

*/

public static void main(String[] args) {

// TODO: Add your code here

}

/**

* Method run

*

*

*/

public void run() {

// TODO: Add your code here

while (true)

//这个true在这里有意义吗?

{

try

{

thread.sleep(1000);

gg.setColor(Color.WHITE);

gg.fillRect(0,0,width,height);

gg.drawImage(image,110,110,width1,height1,this);

repaint();

}

catch (Exception e)

{

System.out.print(e.getMessage());

}

}

}

    private class thread2 implements Runnable

    {

//前面已经有个thread2了,这里有冒出来一个,而且是Runnable接口

//前面那个thread2是Thread类

//难道纯属于该程序员在练习两种线程的创建方法吗?这个问题先放一放

    public void run()

    {

    while (true)

    {

    try

    {

    thread2.sleep(1000);

    }

    catch(Exception e)

    {

    }

    y--;

    if (y<=5)

    {

    y=ystr;

    }

    repaint();

    }

    }

    }

//一堆鼠标事件

public void mouseClicked(MouseEvent e) {

// TODO: Add your code here

System.out.print(e.getX());

        System.out.print(e.getY());

}

public void mousePressed(MouseEvent e) {

// TODO: Add your code here

}

public void mouseReleased(MouseEvent e) {

// TODO: Add your code here

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

public void fileSelect()

{

JFileChooser choose = new JFileChooser();

//为用户选择文件提供了一种简单的机制

choose.setFileSelectionMode(JFileChooser.FILES_ONLY);

choose.setCurrentDirectory(new File("."));

//new File(".")?????????

        choose.setFileFilter(new javax.swing.filechooser.FileFilter()

        {

        public boolean accept(File file)

        {

        String name = file.getName().toLowerCase();

        return name.endsWith(".gif")||name.endsWith(".jpg")

        ||name.endsWith(".jpeg")||file.isDirectory();

        }

        public String getDescription()

        {

        return "图片文件";

        }

        });

//这里看起来java程序的组件应该全都是动态创建的了。难怪很难写。

        int result = choose.showOpenDialog(this);

        String name = null;

        if(result == JFileChooser.APPROVE_OPTION)

        {

        name = choose.getSelectedFile().getAbsolutePath();

        }

        image = tool.getImage(name);

        m.addImage(image,0);

        try{

        m.waitForAll();

        } catch (Exception e){

        System.out.print(e.getMessage());

        }

}

public void actionPerformed(ActionEvent e) {

// TODO: Add your code here

   if(e.getSource() == button1||e.getSource()==button2||e.getSource() ==button3){

   JColorChooser Choose = new JColorChooser();

   }

}

}

写到这里,机器中病毒了,而且自己也觉得没必要再继续写下去了

所有看不懂的一概跳过,最后发现还是从头学比较好

Author: test

供游客使用的测试帐号

One thought on “从一段小程序重新认识自己”

  1. java想在程序的灵活性和封装中寻求平衡。

    例如:c很灵活,delphi封装性好。

    java的图形化编程如果不借助ide,写起来简直就是恶梦。

    祝顺利。

Comments are closed.