2011年6月3日 星期五

6/3-Android匯率


根據上個禮拜,建立一個新專案Change,將下列的程式分別複製貼上到eclipse中




strings.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>

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"
    >

    <TextView
    android:text="@string/str2"
    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>
   
    <TextView
    android:text="@string/str3"
    android:layout_height="wrap_content"
    android:id="@+id/textView2"
    android:layout_width="wrap_content">
    </TextView>
 
    <EditText
    android:layout_height="wrap_content"
    android:id="@+id/editText2"
    android:text=""
    android:layout_width="match_parent">
    </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>

Change.java




package com.android.change;



import java.text.NumberFormat;

import android.app.Activity;
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("100");
      btn1.setOnClickListener(new Button.OnClickListener()
      {
   
        public void onClick(View arg0)
        {
       
        Double no1= Double.valueOf(ed1.getText().toString());
        Double no2= Double.valueOf(ed1.getText().toString());
        String sum= String.valueOf(no1*no2);
        tv1.setText(sum);
       
       
       
       
       
       
          btn1.setWidth(70);
         
         
            // 按鈕事件,處理數學換算的語法
          //NumberFormat nf = NumberFormat.getInstance();
          //nf.setMaximumFractionDigits( 2 );
       
          //double d = Double.parseDouble(ed2.getText().toString()) * Double.parseDouble(ed1.getText().toString());
       
          //tv1.setText( Change.this.getResources().getString(R.string.str3) + ":" + nf.format(d) );
     
        }
      });
   
   
   
    }
}

2011年5月19日 星期四

5/20-Eclipse

P1
開啟時將workspace設在儲存資料夾的上面
例如 我將eclipse存在D槽的source資料夾
我就把workspace存在D:\workspace\

P2
進到eclipse 按 Tutorials選項然後按create a HelloWorld application
接著按照左邊的步驟操作
1.file→new→project ,專案名稱打 HelloWorld→next→finish

2.file→new→class,按照圖中紅色框框輸入

3.在HelloWorld.java視窗,從右下角複製貼上System.out.println("Hello World!");
4.按上面的"run" 就可以在下面的視窗看到執行後的結果


P3
 安裝 ADT 擴充套件 照著步驟做


P4
點右邊的download
然後點圖中紅色框框的壓縮檔下載
將檔案存到source

P5
開啟剛剛的資料夾
執行SDK manager
按installl(需要一些時間)
打開偏好設定頁面(Preference),選擇 Android 標籤(請確認您已安裝好 ADT 擴充套件,Android 標籤才會出現在偏好設定頁面中),在 SDK Location 欄位按下 " Browse..."鍵,選擇剛剛解壓縮完的「android_sdk」檔案夾所在地,然後按下視窗右下角的套用(Apply) 按鈕。 這樣一來,Android SDK 就算是設定好啦。
注意:要等上一個步驟install完,才可以按apply喔!!

P6
按照圖中1234步驟操作

P7
按照圖中123步驟操作
中間可以調大小

P8
可以看到一手機圖!!

P9
利用http://code.google.com/p/androidbmi/wiki/ReadSource
建立一新專案(BMI)
可以看到如圖中結果


更詳細說明請參考建立Android新專案

5/13


01
到老師的部落格點這兩個連結 
02
下載紅色框框裡面的四個檔案到source資料夾
dcm為影像檔
bat為文字檔(按右鍵→編輯→執行)

03
解壓縮ij129.zip
複製裡面的ij.java到jre/lib/ext
或到source→
參考run2.bat編譯執行 可以得到一醫學影像
set CLASSPATH=ij.jar;.是設定路徑

04
紅色框框裡可改視窗名稱
setsize可改影像大小
綠色框框是為了讓圖秀出來

05
加上紅色框框裡的字 imageprocessor
是為了可以做下一部影像處理的動作

06
加上紅色框框裡的字 可以讓影像有雜訊
如圖所示
(從上禮拜5/6號的程式複製而來)


















2011年5月6日 星期五

5/6


P6
開啟index.html
我們就可以改成我們要的圖片跟長寬

如果不用網頁來開啟.  要用appletviewer
我們就要用appletviewer.exe來執行index.html


P5
ipdemo裡面有個ij.jar
將他移到jre\lib\ext資料夾裡


P4
接下來我們到
[  ]

[IMG]

將它存到source資料夾裡
順便也把上禮拜的染色體圖存到ipdemo資料夾裡


P3
現在有了文字方塊了
但是要如何把時間設定程在文字方塊裡顯示呢
利用("Being ticked " + Calendar.getInstance().getTime()); 
刪掉Being ticked 並且在最前面加上 tbx1.setText 就可以了!!

P2
為了讓時間可以在文字方塊裡面顯示
我們利用之前eightpuzzle的程式
將會用到的panel.文字方塊.GridLayout都貼過來
記得~套件也必須複製過來喔
注意!!!要在Timer Demo後面加上extends JFrame 代表繼承
不然程式會有錯誤喔
P1
到上禮拜介紹的網站http://www.rgagnon.com/javadetails/java-0144.html
複製TimerDemo到wordpad
將\007刪除可以讓它不要吵=ˇ=




2011年4月28日 星期四

04/29 封裝

到"程式設計工藝大師"裡的連結"Java電子書",點"封裝",將程式碼
複製到wordpad並存檔,注意:檔名須跟class後的名稱相同!!

將下面一段剪下

另外開啟一個新wordpad,貼上,並存檔

我們另外加一段(紅色框框裡的)

大家可以分別將兩個程式編譯執行看看,可以看到Object1可以執行,
而Person1不可執行,主要是因為Person1沒有"main"!!

我們將宣告的寫法改變,將
Person1 P1,P2;
P1=...;
P2=...;

改成
Person1 P1=...;
Person1 P2=...;
兩者意思相同,只是比較喜歡用後者表示

在Object1加上紅色框框裡的字
紅色框框對應到紅色框框
綠色框框對應到綠色框框


執行後可以看到紅色框框的結果!

到這邊大概可以了解封裝的意思,它可以讓我們不用把程式
寫得很多很複雜,而可以用比較簡便的方式來寫

利用上禮拜的eightpuzzle的程式來試試看
public SwingEightPuzzleEvent() {
}//建構子


將下面會用到的物件通通拿到上面加上static宣告
(各種顏色的框框分別對應)
這樣就不用在程式中重複宣告
這樣就可以讓程式看起來簡潔許多!!

http://www.rgagnon.com/javadetails/java-0144.html複製並且執行,可以看到實際運用!

2011年4月22日 星期五

04/22 BINGO!

首先到 http://tccnchsu.blogspot.com/ 複製第8週程式碼

// with event
//Swing, JButton類別 有ActionListener
//Swing, JButton類別
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SwingTestEvent 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 JTextField tbx1=new JTextField(2); // 建立1文字方塊物件
static JButton buttons[]=new JButton[10];
static JLabel  labels[]=new JLabel [10];
public static void main(String args[])
{
SwingTestEvent myfrm=new SwingTestEvent();

String numbers[]  = {"0", "1", "2", "3", "4", "5", "6", "7", "8"};
FlowLayout flow=new FlowLayout();
GridLayout grid12= new GridLayout(1,2);
GridLayout grid33= new GridLayout(3,3);
myfrm.setLayout(grid12);
myfrm.setSize(450,450);
JPanel p1 = new JPanel(grid33); //實作  panel 1
for (int i = 0; i < numbers.length; i++)
{
buttons[i] = new JButton(numbers[i]); // create buttons
p1.add(buttons[i], grid33); // 在 panel 1內加入按鈕陣列
}

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

JPanel p2 = new JPanel(flow); //實作  panel 2
JButton btn1=new JButton("JButton 1"); // 建立按鈕物件 btn1
btn1.addActionListener(myfrm);
p2.add(tbx1); // 在 panel 2內加入文字方塊
p2.add(btn1); // 在 panel 2內加入按鈕

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


myfrm.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
String stringValue;
stringValue=tbx1.getText();
int intValue = Integer.parseInt(stringValue);
System.out.println(intValue);
buttons[intValue].setBackground(Color.blue);
labels[intValue].setText(stringValue);

}
}

將最下面的部分
String stringValue;
stringValue=tbx1.getText();
int intValue = Integer.parseInt(stringValue);
System.out.println(intValue);
buttons[intValue].setBackground(Color.blue);
labels[intValue].setText(stringValue);


 改成

如圖中紅色框框部分
int rndon=(int)(Math.random()*9); //產生亂數
利用for迴圈省去一個個改數字的麻煩

利用tmp來產生亂數(將tmp視為一個暫時的位子)

String tmp;//宣告tmp
tmp=numbers[8];//第8個數字先坐在tmp→第8個位子是空的
numbers[8]=numbers[rndon];//產生的亂數坐到第8個位子→第8個位子被填滿,亂數的位子是空的
numbers[rndon]=tmp;//tmp位子數字(剛剛的第8個數字)坐到亂數的位子
利用不斷產生亂數,使得每一次每個位子的數字都會不一樣


因為我們的目的是產生5X5個亂數
所以記得將這些地方修改掉

最後程式碼變為



// with event
//Swing, JButton類別 有ActionListener
//Swing, JButton類別
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
public class SwingTestEvent 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 JTextField tbx1=new JTextField(2); // 建立1文字方塊物件
static JButton buttons[]=new JButton[25];
static JLabel  labels[]=new JLabel [25];
public static void main(String args[])
{
SwingTestEvent myfrm=new SwingTestEvent();

String numbers[]  = {"0","1", "2","3",  "4","5",  "6","7",  "8","9",  "10","11",  "12","13",  "14","15",  "16","17",  "18","19",  "20","21",  "22","23",  "24" };
FlowLayout flow=new FlowLayout();
GridLayout grid12= new GridLayout(1,2);
GridLayout grid33= new GridLayout(5,5);
myfrm.setLayout(grid12);
myfrm.setSize(900,600);
JPanel p1 = new JPanel(grid33); //實作  panel 1
for (int i = 0; i < numbers.length; i++)
{
buttons[i] = new JButton(numbers[i]); // create buttons
p1.add(buttons[i], grid33); // 在 panel 1內加入按鈕陣列
}
myfrm.add(p1); // 在視窗myfrm 內加入 panel 1
JPanel p3 = new JPanel(grid33); //實作  panel 3
for (int i = 0; i < numbers.length; i++)
{
labels[i] = new JLabel(); // create labels
p3.add(labels[i], grid33); // 在 panel 1內加入按鈕陣列
}
myfrm.add(p3); // 在視窗myfrm 內加入 panel 3
JPanel p2 = new JPanel(flow); //實作  panel 2
JButton btn1=new JButton("JButton 1"); // 建立按鈕物件 btn1
btn1.addActionListener(myfrm);
p2.add(tbx1); // 在 panel 2內加入文字方塊
p2.add(btn1); // 在 panel 2內加入按鈕
myfrm.add(p2); // 在視窗myfrm 內加入 panel 2

myfrm.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
String numbers[]  = {"0","1", "2","3",  "4","5",  "6","7",  "8","9",  "10","11",  "12","13",  "14","15",  "16","17",  "18","19",  "20","21",  "22","23",  "24" };
String stringValue;
String tmp;
//stringValue=tbx1.getText();
/*
for (int i = 0; i < 9; i++)
{
int rndno = (int)(Math.random()*9);
System.out.println(rndno);
numbers[i]=String.valueOf(rndno);
buttons[i].setLabel(numbers[i]);
}
*/
for (int i = 0; i <25; i++)
{
int y=24-i;
int rndno = (int)(Math.random()*(y+1));
System.out.println(rndno);
tmp=numbers[y];
numbers[y]=numbers[rndno];
numbers[rndno]=tmp;
}

for (int i = 0; i < 25; i++)
{
System.out.println(numbers[i]);
buttons[i].setLabel(numbers[i]);
}

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


注意


for (int i = 0; i < 25; i++)
{
System.out.println( numbers[i]);
buttons[i].setLabel(numbers[i]);
}

是為了能夠看到產生的亂數



在60個數字裡產生25個亂數

只要改掉一些地方即可 25→60

// with event
//Swing, JButton類別 有ActionListener
//Swing, JButton類別
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
public class SwingTestEvent 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 JTextField tbx1=new JTextField(2); // 建立1文字方塊物件
static JButton buttons[]=new JButton[25];
static JLabel  labels[]=new JLabel [25];
public static void main(String args[])
{
SwingTestEvent myfrm=new SwingTestEvent();


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

FlowLayout flow=new FlowLayout();
GridLayout grid12= new GridLayout(1,2);
GridLayout grid33= new GridLayout(5,5);
myfrm.setLayout(grid12);
myfrm.setSize(900,600);
JPanel p1 = new JPanel(grid33); //實作  panel 1
for (int i = 0; i < 25; i++)
{
buttons[i] = new JButton(numbers[i]); // create buttons
p1.add(buttons[i], grid33); // 在 panel 1內加入按鈕陣列
}

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

JPanel p2 = new JPanel(flow); //實作  panel 2
JButton btn1=new JButton("JButton 1"); // 建立按鈕物件 btn1
btn1.addActionListener(myfrm);
p2.add(tbx1); // 在 panel 2內加入文字方塊
p2.add(btn1); // 在 panel 2內加入按鈕

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


myfrm.setVisible(true);
}
public void actionPerformed(ActionEvent e)

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

String stringValue;
String tmp;
//stringValue=tbx1.getText();

System.out.println(tbx1.getText());

for (int i = 0; i <61; i++)
{
int y=60-i;
int rndno = (int)(Math.random()*(y+1));
System.out.println(rndno);
tmp=numbers[y];
numbers[y]=numbers[rndno];
numbers[rndno]=tmp;
}


for (int i = 0; i < 25; i++)
{
System.out.println(numbers[i]);
buttons[i].setLabel(numbers[i]);
}


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

}
}


2011年4月1日 星期五

第7次上課

在google搜尋"Java Button listener"
我們在JFrame後面加上implements ActionListener
加上下面的紅色框框(將int跟string轉換)
可以得到結果!!
我們想要將(9個button)跟(1個文字方塊+1個button)放在不同的panel
所以我們分別加入了兩個panel
把button跟textfield都加入各別的panel裡
再將panel都加到frame裡
在google搜尋"Java Button array"
參考網頁的方法,利用此方法可以省去很多麻煩
因為我們要加入許多按鈕,而BorderLayout只能用EAST、WEST...等
所以我們改用GridLayout,讓多個按鈕可以整齊排列
執行後可以看到這個結果
加入swing套件,並且在Button跟Frame跟TextField前面都加上J
先到老師部落格複製


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

public class SwingTest extends JFrame  implements ActionListener
{
//static JFrame myfrm=new JFrame("JButton class"); // Java Class JFrame
static JTextField tbx1=new JTextField(); // 建立1文字方塊物件
static JButton bb1=new JButton("bb1 ");
public static void main(String args[])
{
SwingTest myfrm=new SwingTest();
JButton button[]=new JButton[10];
String numbers[]  = {"0", "1", "2", "3", "4", "5", "6", "7", "8"};
GridLayout border=new GridLayout(3,3);
JPanel p1 = new JPanel(border); //PREFERRED!
JPanel p2 = new JPanel(border); //PREFERRED!
bb1.addActionListener(myfrm);
for (int i = 0; i < numbers.length; i++)
{
button[i] = new JButton(numbers[i]); // create buttons
p1.add(button[i], border);
p2.add(tbx1, border);
p2.add(bb1, border);
}
myfrm.add(p1);
myfrm.add(p2);
myfrm.setLayout(border);
myfrm.setSize(250,150);
myfrm.setVisible(true);
}

public void actionPerformed(ActionEvent e)
{
String stringValue;
stringValue=tbx1.getText();
int intValue = Integer.parseInt(stringValue);
System.out.println(stringValue);
}
}

2011年3月25日 星期五

第6次上課-button與textfield

程式設計工藝大師裡面複製Basic Class Template of  AWT的內容,
複製貼到wordpad裡,檔名必須與public class後的"AwtTest"相同
如圖中,編譯然後執行,即可看到button,
如果不能把button的視窗關掉,回到命令提示字元,按ctrl+C即可

我們可以另外加入許多button

加入button並且編譯執行後,只會出現一個button,
這是因為其它的button被他壓在下面,所以我們必須將button排好,
才可以看到全部的button。到google搜尋"java 版面",可以找到有關borderlayout的相關資訊
於是我們繼續搜尋"java borderlayout",可以找到BorderLayout border = new BorderLayout();
再加入myfrm.setLayout(border);
然後,如圖中所示,在btn後面加上" ,border.EAST " 等等..
編譯執行,就可以看到5個button排排站好了!

接下來我們想加入文字方塊,將"Button"改成"TextField"

在網路上可以找到另一種文字方塊的寫法(Textbox),
但是它是用在javax底下,而我們所用的java\awt底下
文字方塊的寫法應為"TextField"

到現在我們的button按下都沒有反應,所以我們要幫它加耳朵,
參考之前做過的,我們加入ActionListeners在AwtTest後面。
參考之前大樂透選號碼的程式,我們在下面加上程式,
注意ActionEvent,ActionEvent.java雖然在awt\event底下,但awt.*沒有包含資料夾,
所以我們必須再加上一行import java.awt.event.*;
ActionEvent才可以執行

btn1.addActionListener(myfrm);
加入此行,讓btn1有耳朵

將整數轉字串






// AWT, Button類別
import java.awt.*;
import java.awt.event.*;
public class AwtTest extends Frame implements ActionListener
{
//static Frame myfrm=new Frame("12356");
//static AwtTest myfrm=new AwtTest("Button class");
static Button btn1=new Button("btn1"); // 建立按鈕物件
static TextField tbx1=new TextField("tbx1"); //建立文字方塊
static TextField tbx2=new TextField("tbx2"); //建立文字方塊
static TextField tbx3=new TextField("tbx3"); //建立文字方塊
static TextField tbx4=new TextField("tbx4"); //建立文字方塊
static TextField tbx5=new TextField("tbx5"); //建立文字方塊
static TextField tbx6=new TextField("tbx6"); //建立文字方塊
static TextField tbx7=new TextField("tbx7"); //建立文字方塊
public static void main(String args[])
{
AwtTest myfrm = new AwtTest();
FlowLayout flow = new FlowLayout();
myfrm.setLayout(flow);
myfrm.setSize(200,150);
btn1.addActionListener(myfrm);
myfrm.add(btn1); // 在視窗內加入按鈕
myfrm.add(tbx1);
myfrm.add(tbx2);
myfrm.add(tbx3);
myfrm.add(tbx4);
myfrm.add(tbx5);
myfrm.add(tbx6);
myfrm.add(tbx7);
myfrm.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
int rn1,rn2, rn3,rn4,rn5,rn6,rn7;
rn1=(int) (Math.random()*49) ;
rn2=(int) (Math.random()*49) ;
rn3=(int) (Math.random()*49) ;
rn4=(int) (Math.random()*49) ;
rn5=(int) (Math.random()*49) ;
rn6=(int) (Math.random()*49) ;
rn7=(int) (Math.random()*49) ;
System.out.println(rn1);
System.out.println(rn2);
System.out.println(rn3);
System.out.println(rn4);
System.out.println(rn5);
System.out.println(rn6);
System.out.println(rn7);
String stringValue1 = Integer.toString(rn1);
String stringValue2 = Integer.toString(rn2);
String stringValue3 = Integer.toString(rn3);
String stringValue4 = Integer.toString(rn4);
String stringValue5 = Integer.toString(rn5);
String stringValue6 = Integer.toString(rn6);
String stringValue7 = Integer.toString(rn7);
tbx1.setText(stringValue1);
tbx2.setText(stringValue2);
tbx3.setText(stringValue3);
tbx4.setText(stringValue4);
tbx5.setText(stringValue5);
tbx6.setText(stringValue6);
tbx7.setText(stringValue7);
}
}