2011年6月10日 星期五

java - 期末


我自己做的程式  -   大學生一天花費的帳本


package fcu.d9726481;

import java.text.NumberFormat;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Java extends Activity {
    /** Called when the activity is first created. */
private EditText ed1,ed2,ed3,ed4,ed5,ed6,ed7;
private Button btn1;
private TextView tv9;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ed1=(EditText) Java.this.findViewById(R.id.editText1);
        ed2=(EditText) Java.this.findViewById(R.id.editText2);
        ed3=(EditText) Java.this.findViewById(R.id.editText3);
        ed4=(EditText) Java.this.findViewById(R.id.editText4);
        ed5=(EditText) Java.this.findViewById(R.id.editText5);
        ed6=(EditText) Java.this.findViewById(R.id.editText6);
        ed7=(EditText) Java.this.findViewById(R.id.editText7);
       
        ed1.setText("1000");
       
       
        btn1=(Button) Java.this.findViewById(R.id.button1);
       
       
        tv9=(TextView) Java.this.findViewById(R.id.textView9);
       
       
       
       
        btn1.setOnClickListener(new Button.OnClickListener(){

public void onClick(View v) {


NumberFormat nf = NumberFormat.getInstance();
       nf.setMaximumFractionDigits( 2 );
     
        double d = Double.parseDouble(ed2.getText().toString())
        + Double.parseDouble(ed3.getText().toString())
        + Double.parseDouble(ed4.getText().toString())
        + Double.parseDouble(ed5.getText().toString());
           

ed6.setText(nf.format(d));



        double i;
        double a = Double.parseDouble(ed1.getText().toString());
     
        i = a-d;
 

        ed7.setText(nf.format(i));



      if (i>=300){
  tv9.setText("GREAT!!!!!");
  tv9.setTextColor(Color.YELLOW);
 }  
 else if (i<300 && i>=100){
  tv9.setText("NORMAL!!!!!");
  tv9.setTextColor(Color.GREEN);
 }
 else if (i<0){
  tv9.setText("BAD!!!!!");
  tv9.setTextColor(Color.RED);
 }

// TODO Auto-generated method stub

}});
       
             
    }
}







它的main.xml



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:orientation="vertical">
    <LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/linearLayout1">
        <TextView android:text="一天預算:" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        <EditText android:layout_height="wrap_content" android:id="@+id/editText1" android:text="" android:layout_width="match_parent"></EditText>
    </LinearLayout>
    <LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/linearLayout2">
        <TextView android:text="三餐:" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        <EditText android:layout_height="wrap_content" android:id="@+id/editText2" android:text="" android:layout_width="match_parent"></EditText>
    </LinearLayout>
    <LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/linearLayout3">
        <TextView android:text="購物:" android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        <EditText android:layout_height="wrap_content" android:id="@+id/editText3" android:text="" android:layout_width="match_parent"></EditText>
    </LinearLayout>
    <LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/linearLayout4">
        <TextView android:text="娛樂:" android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        <EditText android:layout_height="wrap_content" android:id="@+id/editText4" android:text="" android:layout_width="match_parent"></EditText>
    </LinearLayout>
    <LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/linearLayout6">
        <TextView android:text="其他:" android:id="@+id/textView5" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        <EditText android:layout_height="wrap_content" android:id="@+id/editText5" android:text="" android:layout_width="match_parent"></EditText>
    </LinearLayout>
    <LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/linearLayout7">
        <TextView android:text="花費總計:" android:id="@+id/textView6" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        <EditText android:layout_height="wrap_content" android:id="@+id/editText6" android:text="" android:layout_width="match_parent"></EditText>
    </LinearLayout>
    <LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/linearLayout8">
        <TextView android:text="剩餘金額:" android:id="@+id/textView7" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        <EditText android:layout_height="wrap_content" android:id="@+id/editText7" android:text="" android:layout_width="match_parent"></EditText>
    </LinearLayout>
    <LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/linearLayout9">
        <Button android:layout_height="wrap_content" android:id="@+id/button1" android:text="按" android:layout_width="wrap_content"></Button>
        <TextView android:layout_height="wrap_content" android:id="@+id/textView8" android:text="今日表現:      " android:layout_width="wrap_content"></TextView>
        <TextView android:text="" android:id="@+id/textView9" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    </LinearLayout>
</LinearLayout>




所以執行後



這個構想我是取自在Android Market  
裡面的雲端帳簿https://market.android.com/details?id=ray.money&feature=search_result







再來50分的程式
感謝這網址的作者http://cooking-java.blogspot.com/

我寫的是裡面的 - 打電話

要改的地方有PhoneCall.java



package tw.nicky.PhoneCall;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class PhoneCall extends Activity {
private Button callButton;
private EditText editText;
    @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       callButton = (Button)findViewById(R.id.callButton);
       editText = (EditText)findViewById(R.id.editText);
         
        //按下call按鈕
       callButton.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
    String phoneNumber = editText.getText().toString();
  //啟動撥打電話程式
    Intent intentDial = new Intent("android.intent.action.CALL",Uri.parse("tel:"+phoneNumber));
    startActivity(intentDial);
  }
  });
    }
}





還有main.xml 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</EditText>
<Button
android:id="@+id/callButton"
android:text="Call"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
</LinearLayout>








最重要的要更改 AndroidManifest.xml


需要先取得CALL_PHONE的權限,因此需在AndroidManifest.xml允許存取android.permission.CALL_PHONE這個權限。





<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="tw.nicky.PhoneCall"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
      <activity android:name=".PhoneCall"
                android:label="@string/app_name">
            <intent-filter>
               <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
</manifest>






2011年5月29日 星期日

java - Android

從上一次上課就開始教我們使用Android
也下載了很久!!

以下大概是他的開機畫面





其他還有很多地方可以玩看看....請自行發掘!!!!!

這一次寫了一個換算匯率的程式(半成品)

先在main.xml 編寫你要的東西


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_height="wrap_content" android:layout_width="wrap_content">
   
    <TextView 
    android:text="@string/str2"  
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content">
    </TextView>
    
     <EditText 
    android:id="@+id/editText1" 
    android:text="" 
    android:layout_height="wrap_content" android:layout_width="300dip">
    </EditText>
    
    <TextView 
    android:text="@string/str3"  
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content">
    </TextView>
    
    <EditText 
    android:id="@+id/editText2" 
    android:text="" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content">
    </EditText>
    
    
    
    <Button 
    android:text="計算台幣兌換美金" 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content">
    </Button>
    
    
    <TextView 
    android:text="@string/str_btn1" 
    android:id="@+id/textView3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content">
    </TextView>
   
   </LinearLayout>




以上紅色部分的程式會顯示為以下圖片中的
文字方塊 //TextView 
按鈕 //Button 
輸入資料的格子 //EditText 



其中上面程式的
android:text="@string/str2"
android:text="@string/str3"  
android:text="@string/str_btn1" 


是由string.xml中的程式來的
以下是它的內容


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, EX203!</string>
  <string name="app_name">匯率換算</string>
 
  <string name="str1">匯率換算</string>
  <string name="str2">匯率</string>
  <string name="str3">臺幣</string>
  
  <string name="str_btn1">可兌換美金</string>


</resources>




而主要的程式還是java檔

package edu.fcu.d9726481;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Change extends Activity {
 private EditText ed1, ed2;
 private Button btn1;
 private TextView tv1;
 public static final String MY_PREFS = "mSharedPreferences01";
    /** Called when the activity is first created. */
    @Override
    
    
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ed1 = (EditText)Change.this.findViewById(R.id.editText1);  // 匯率
        ed2 = (EditText)Change.this.findViewById(R.id.editText2);  // 台幣
        btn1 = (Button)Change.this.findViewById(R.id.button1);
        tv1 = (TextView)Change.this.findViewById(R.id.textView3);
        
        ed1.setText("28.5");
        ed2.setText("10000");
        
        btn1.setOnClickListener(new Button.OnClickListener(){


public void onClick(View v) {
// TODO Auto-generated method stub
package edu.fcu.d9726481; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class Change extends Activity { private EditText ed1, ed2; private Button btn1; private TextView tv1; public static final String MY_PREFS = "mSharedPreferences01"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ed1 = (EditText)Change.this.findViewById(R.id.editText1); // 匯率 ed2 = (EditText)Change.this.findViewById(R.id.editText2); // 台幣 btn1 = (Button)Change.this.findViewById(R.id.button1); tv1 = (TextView)Change.this.findViewById(R.id.textView3); ed1.setText("28.5"); ed2.setText("10000"); btn1.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v) { // TODO Auto-generated method stub ed1.setTextColor(Color.RED); } } ); } }
}
        }
        );
        
        
        
    }
}



所以執行在Android的結果就是下面這張圖












作業就是從上面程式中改橘色那一行
可以按按鈕使它改變顏色!!!(也可以改變其他的)
















心得:


感覺它寫程式的樣子跟原本的java好像差不多
但又有一些不一樣


像我要修改顏色時
不能使用原本教的方法set.background(red);















2011年5月6日 星期五

java - 繼承

繼承主要是在程式中加上 extends JFrame

如下:

public class TimerDemo extends JFrame implements ActionListener

所以可以用前面的程式修改

如下:


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


public class TimerDemo extends JFrame implements ActionListener {
  static JTextField tbx1=new JTextField(30 ); // 建立1文字方塊物件
  Timer t = new Timer(1000,this);

 /* TimerDemo() {
    t.start();
    }
*/
  public static void main(String args[]) {
    TimerDemo td = new TimerDemo();
    FlowLayout flow=new FlowLayout();
    td.setSize(500,500);

    JButton btn1=new JButton("現在時間"); // 建立按鈕物件 btn1
    btn1.addActionListener(td);
    JPanel p1 = new JPanel(flow);
    td.add(p1); // 在視窗td 內加入 panel 1
    p1.add(tbx1); // 在 panel 1內加入文字方塊
    p1.add(btn1); // 在 panel 1內加入按鈕
    td.setVisible(true);



     // create a dummy frame to keep the JVM running
    //  (for demonstation purpose)
    //java.awt.Frame dummy = new java.awt.Frame();
    //dummy.setVisible(true);
    }

  public void actionPerformed(ActionEvent e) {

  String time =""+Calendar.getInstance().getTime();
    /*if (e.getSource() == t) {
      System.out.println
        ("Being ticked " + Calendar.getInstance().getTime());
      }*/
    tbx1.setText(time);
       }
}









接下來教了Applet



import ij.*;
import java.applet.*;
import java.awt.*;
import ij.process.*;

/**Simple applet that demonstrates how to use ImageJ's ImageProcessor class.*/
public class IPDemo extends Applet {

String name;
Image img;
ImageProcessor ip = null;

public void init() {
setLayout(new BorderLayout());
Panel p = new Panel();
                           p.setLayout(new GridLayout(5, 3));
p.add(new Button("Reset"));
p.add(new Button("Flip"));
p.add(new Button("Invert"));
p.add(new Button("Lighten"));
p.add(new Button("Darken"));
p.add(new Button("Rotate"));
p.add(new Button("Zoom In"));
p.add(new Button("Zoom Out"));
p.add(new Button("Threshsold"));
p.add(new Button("Smooth"));
p.add(new Button("Sharpen"));
p.add(new Button("Find Edges"));
p.add(new Button("Macro 1"));
p.add(new Button("Macro 2"));        
p.add(new Button("Add Noise"));    
                             
               add("South", p);
name = getParameter("img");
img = getImage(getDocumentBase(), name);
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(img, 0);
try {tracker.waitForID(0);}
catch (InterruptedException e){}
if (name.endsWith("jpg"))
ip = new ColorProcessor(img);
else
ip = new ByteProcessor(img);
                                                           
                         
ip.snapshot();

}


public void update(Graphics g) {
paint(g);
}

public void paint(Graphics g) {
g.drawImage(img, 0, 0, this);
}

public boolean action(Event e, Object arg) {
if (e.target instanceof Button) {
String label = (String)arg;
if (label.equals("Reset"))
ip.reset();
else if (label.equals("Flip"))
ip.flipVertical();
else if (label.equals("Invert"))
ip.invert();
else if (label.equals("Lighten"))
ip.multiply(1.1);
else if (label.equals("Darken"))
ip.multiply(0.9);
else if (label.equals("Rotate"))
ip.rotate(30);
else if (label.equals("Zoom In"))
ip.scale(1.2, 1.2);
else if (label.equals("Zoom Out"))
ip.scale(0.8, 0.8);
else if (label.equals("Threshsold"))
ip.autoThreshold();
else if (label.equals("Smooth"))
ip.smooth();
else if (label.equals("Sharpen"))
ip.sharpen();
else if (label.equals("Find Edges"))
ip.findEdges();
else if (label.equals("Macro 1"))
macro1();
else if (label.equals("Macro 2"))
macro2();
else if (label.equals("Add Noise"))
ip.noise(20);
img = ip.createImage();



repaint();
return true;
}
return false;
}

void updateAndDraw() {
                           
                                img.flush();
img = ip.createImage();
getGraphics().drawImage(img, 0, 0, this);
}

void macro1() {
for (int i=10; i<=360; i+=10) {
ip.reset();
ip.rotate(i);
updateAndDraw();
}
}

void macro2() {
double scale = 1, m = 1.2;
for (int i=0; i<20; i++) {
ip.reset();
scale *= m;
ip.scale(scale, scale);
updateAndDraw();
}
for (int i=0; i <20; i++) {
ip.reset();
scale /= m;
ip.scale(scale, scale);
updateAndDraw();
}
}


}















作業
把它按鈕丟掉
但會顯示其效果


import ij.*;
import java.applet.*;
import java.awt.*;
import ij.process.*;

/**Simple applet that demonstrates how to use ImageJ's ImageProcessor class.*/
public class IPDemo extends Applet {

String name;
Image img;
ImageProcessor ip = null;

public void init() {
setLayout(new BorderLayout());
Panel p = new Panel();
                         /*    p.setLayout(new GridLayout(5, 3));
p.add(new Button("Reset"));
p.add(new Button("Flip"));
p.add(new Button("Invert"));
p.add(new Button("Lighten"));
p.add(new Button("Darken"));
p.add(new Button("Rotate"));
p.add(new Button("Zoom In"));
p.add(new Button("Zoom Out"));
p.add(new Button("Threshsold"));
p.add(new Button("Smooth"));
p.add(new Button("Sharpen"));
p.add(new Button("Find Edges"));
p.add(new Button("Macro 1"));
p.add(new Button("Macro 2"));        
p.add(new Button("Add Noise"));      */
                             
               add("South", p);
name = getParameter("img");
img = getImage(getDocumentBase(), name);
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(img, 0);
try {tracker.waitForID(0);}
catch (InterruptedException e){}
if (name.endsWith("jpg"))
ip = new ColorProcessor(img);
else
ip = new ByteProcessor(img);
                                img = ip.createImage();
                                ip.noise(100);
                                ip.findEdges();
                             
                         
ip.snapshot();

}


public void update(Graphics g) {
paint(g);
}

public void paint(Graphics g) {
g.drawImage(img, 0, 0, this);
}

public boolean action(Event e, Object arg) {
if (e.target instanceof Button) {
String label = (String)arg;
if (label.equals("Reset"))
ip.reset();
else if (label.equals("Flip"))
ip.flipVertical();
else if (label.equals("Invert"))
ip.invert();
else if (label.equals("Lighten"))
ip.multiply(1.1);
else if (label.equals("Darken"))
ip.multiply(0.9);
else if (label.equals("Rotate"))
ip.rotate(30);
else if (label.equals("Zoom In"))
ip.scale(1.2, 1.2);
else if (label.equals("Zoom Out"))
ip.scale(0.8, 0.8);
else if (label.equals("Threshsold"))
ip.autoThreshold();
else if (label.equals("Smooth"))
ip.smooth();
else if (label.equals("Sharpen"))
ip.sharpen();
else if (label.equals("Find Edges"))
ip.findEdges();
else if (label.equals("Macro 1"))
macro1();
else if (label.equals("Macro 2"))
macro2();
else if (label.equals("Add Noise"))
ip.noise(20);
img = ip.createImage();



repaint();
return true;
}
return false;
}

void updateAndDraw() {
                           
                                img.flush();
img = ip.createImage();
getGraphics().drawImage(img, 0, 0, this);
}

void macro1() {
for (int i=10; i<=360; i+=10) {
ip.reset();
ip.rotate(i);
updateAndDraw();
}
}

void macro2() {
double scale = 1, m = 1.2;
for (int i=0; i<20; i++) {
ip.reset();
scale *= m;
ip.scale(scale, scale);
updateAndDraw();
}
for (int i=0; i <20; i++) {
ip.reset();
scale /= m;
ip.scale(scale, scale);
updateAndDraw();
}
}


}






2011年4月29日 星期五

java - 封裝

今天教的是封裝

把一個檔案分成兩個檔案
然後還是可以執行

而且可以縮減程式的篇幅


大致上如下面這個程式
是經過整理的


// with event
//Swing, JButton類別 有ActionListener
//Swing, JButton類別
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SwingEightPuzzleEvent extends JFrame implements ActionListener
{
//static JFrame myfrm=new JFrame("JButton class"); // Java Class JFrame
//static AwtTestEvent myfrm=new AwtTestEvent("JFrame 1 "); // Java Class JFrame


static FlowLayout flow=new FlowLayout();
static GridLayout grid12= new GridLayout(1,2);
static GridLayout grid33= new GridLayout(3,3);

static JPanel p1 = new JPanel(grid33); //實作  panel 1
static JPanel p2 = new JPanel(flow); //實作  panel 2
static JPanel p3 = new JPanel(grid33); //實作  panel 3

static JLabel  labels[]=new JLabel [10];
static JButton buttons[]=new JButton[10];
static JTextField tbx1=new JTextField(2); // 建立1文字方塊物件
static JButton btn1=new JButton("JButton 1"); // 建立按鈕物件 btn1
static String numbers[]  = {"0", "1", "2", "3", "4", "5", "6", "7", "8"};



public SwingEightPuzzleEvent()
{

for (int i = 0; i < numbers.length; i++)
{
labels[i] = new JLabel(); // create labels
buttons[i] = new JButton(numbers[i]); // create buttons
p1.add(buttons[i], grid33); // 在 panel 1內加入按鈕陣列
p3.add(labels[i], grid33); // 在 panel 1內加入按鈕陣列
}



p2.add(tbx1); // 在 panel 2內加入文字方塊
p2.add(btn1); // 在 panel 2內加入按鈕


}



public static void main(String args[])
{
SwingEightPuzzleEvent myfrm=new SwingEightPuzzleEvent();

myfrm.setLayout(grid12);
myfrm.setSize(450,450);

myfrm.add(p1); // 在視窗myfrm 內加入 panel 1
myfrm.add(p2); // 在視窗myfrm 內加入 panel 2
myfrm.add(p3); // 在視窗myfrm 內加入 panel 3

btn1.addActionListener(myfrm);

myfrm.setVisible(true);
}

public void actionPerformed(ActionEvent e)
{
String numbers[]  = {"0", "1", "2", "3", "4", "5", "6", "7", "8"};
//int rndno;
//String stringValue;
//stringValue=tbx1.getText();
//int intValue = Integer.parseInt(stringValue);
//System.out.println(intValue);
//labels[intValue].setText(stringValue);

/*
for (int j = 0; j < 9; j++)
{
//rndno=(int) (Math.random()*9);
//System.out.println(rndno);
//numbers[i]=String.valueOf(rndno);
//buttons[i].setLabel(numbers[i]);
}
*/

//tbx1.setText(numbers[0]);
//buttons[rndno].setBackground(Color.blue);
//labels[rndno].setText(numbers[0]);
}
}




作業

老師給我們兩個程式編譯&執行(程式取自http://www.rgagnon.com/javadetails/java-0144.html)

第一個

import java.util.Timer;
import java.util.TimerTask;

public class ToDo  {
  Timer timer;

  public ToDo ( int seconds )   {
    timer = new Timer (  ) ;
    timer.schedule ( new ToDoTask (  ) , seconds*1000 ) ;
  }


  class ToDoTask extends TimerTask  {
    public void run (  )   {
      System.out.println ( "OK, It's time to do something!" ) ;
      timer.cancel (  ) ; //Terminate the thread
    }
  }


  public static void main ( String args [  ]  )   {
    System.out.println ( "Schedule something to do in 5 seconds." ) ;
    new ToDo ( 5 ) ;
    System.out.println ( "Waiting." ) ;
  }
}



會出現以下結果





第二個

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

public class TimerDemo implements ActionListener {
  Timer t = new Timer(1000,this);

  TimerDemo() {
    t.start();
    }

  public static void main(String args[]) {
    TimerDemo td = new TimerDemo();
    // create a dummy frame to keep the JVM running
    //  (for demonstation purpose)
    java.awt.Frame dummy = new java.awt.Frame();
    dummy.setVisible(true);
    }

  public void actionPerformed(ActionEvent e) {
    if (e.getSource() == t) {
      System.out.println 
        ("\007Being ticked " + Calendar.getInstance().getTime());
      }
    }
}




會出現下面結果


會一直跑....還會有逼逼逼逼逼聲


加分題


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


public class TimerDemo extends JFrame implements ActionListener
{
Timer t = new Timer(1000,this);

static JLabel  labels[]=new JLabel [10];
static JButton buttons[]=new JButton[10];
static JTextField tbx1=new JTextField("                                                                                                                                 "); // 建立1文字方塊物件

TimerDemo()
{
t.start();

}



  public static void main(String args[]) {
 TimerDemo myfrm = new TimerDemo();
FlowLayout flow=new FlowLayout();
GridLayout grid12= new GridLayout(1,2);
GridLayout grid33= new GridLayout(3,3);
myfrm.setLayout(grid12);
myfrm.setSize(500,500);

String numbers[]  = {"0", "1", "2", "3", "4", "5", "6", "7", "8"};
JPanel p2 = new JPanel(grid33); //實作  panel 1
JPanel p3 = new JPanel(grid33); //實作  panel 3

for (int i = 0; i < numbers.length; i++)
{
labels[i] = new JLabel(); // create labels
buttons[i] = new JButton(numbers[i]); // create buttons
p2.add(buttons[i], grid33); // 在 panel 1內加入按鈕陣列
p3.add(labels[i], grid33); // 在 panel 1內加入按鈕陣列
}
myfrm.add(p2); // 在視窗myfrm 內加入 panel 1
myfrm.add(p3); // 在視窗myfrm 內加入 panel 3

JPanel p1 = new JPanel(flow); //實作  panel 2
myfrm.add(p1); // 在視窗myfrm 內加入 panel 2

p1.add(tbx1); // 在 panel 2內加入文字方塊

  
  


     myfrm.setVisible(true);
     java.awt.Frame dummy = new java.awt.Frame();
     dummy.setVisible(true);
    }

  public void actionPerformed(ActionEvent e) {
    if (e.getSource() == t) {
      System.out.println
        ("\007Being ticked " + Calendar.getInstance().getTime());
      }
tbx1.setText("\007Being ticked " + Calendar.getInstance().getTime());
    }
}





在命令提示字元上會顯示時間
而且文字方塊一樣也會顯示時間

只是我還沒把文字方塊控制到想要的地方
還有方塊長度也是還沒掌握的






5/6改(文字方塊部分比上述的程式好一點)



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


public class TimerDemo extends JFrame implements ActionListener
{
Timer t = new Timer(1000,this);

static JLabel  labels[]=new JLabel [10];
static JButton buttons[]=new JButton[10];
static JTextField tbx1=new JTextField(""); // 建立1文字方塊物件
static JButton btn1=new JButton("JButton 1"); // 建立按鈕物件 btn1
TimerDemo()
{
t.start();

}


 
public static void main(String args[]) {
TimerDemo myfrm = new TimerDemo();
FlowLayout flow=new FlowLayout();
GridLayout grid12= new GridLayout(1,2);
GridLayout grid33= new GridLayout(3,3);
myfrm.setLayout(grid12);
myfrm.setSize(1000,1000);

String numbers[]  = {"0", "1", "2", "3", "4", "5", "6", "7", "8"};
JPanel p1 = new JPanel(grid33); //實作  panel 1
JPanel p3 = new JPanel(grid33); //實作  panel 3

for (int i = 0; i < numbers.length; i++)
{
labels[i] = new JLabel(); // create labels
buttons[i] = new JButton(numbers[i]); // create buttons
p1.add(buttons[i], grid33); // 在 panel 1內加入按鈕陣列
p3.add(labels[i], grid33); // 在 panel 1內加入按鈕陣列
}
myfrm.add(p1); // 在視窗myfrm 內加入 panel 1
myfrm.add(p3); // 在視窗myfrm 內加入 panel 3

JPanel p2 = new JPanel(flow); //實作  panel 2
myfrm.add(p2); // 在視窗myfrm 內加入 panel 2
btn1.addActionListener(myfrm);

//p2.add(tbx1); // 在 panel 2內加入文字方塊
p2.add(btn1); // 在 panel 2內加入按鈕
myfrm.add(tbx1);  
   


     myfrm.setVisible(true);
     java.awt.Frame dummy = new java.awt.Frame();
     dummy.setVisible(true);
    }

  public void actionPerformed(ActionEvent e)
{

String numbers[]=new String[101];
for (int i = 0; i <100; i++)
{
numbers[i]=String.valueOf(i);
}


    if (e.getSource() == t) {
      System.out.println
        ("\007Being ticked " + Calendar.getInstance().getTime());
      }
tbx1.setText("\007Being ticked " + Calendar.getInstance().getTime());


    }
}