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);
}
}

2011年3月17日 星期四

第5次上課

後面+1是代表不會有0產生
輸入紅色框框裡的程式,即可隨機產生49個號碼

依照圖中所示,將出現一button

4. 在網路上另外找一程式,將之儲存,並將之編譯執行,
按下copy、cut、paste按鈕,分別會出現copy、cut、paste
3. Button mybutton = new Button ("ABC") 是代表依Button做一"Button"
可用"上帝依照祂的形象造人"來理解
myframe.add(mybutton1)則是代表在表單(frame)裡加入一Button(mybutton1)
2.使用println可以在執行時,出現wait
1.在網路上找到有關button的程式,複製到wordpad上

第4次上課-Button and Check box

首先在wordpad開一新檔案,存檔類型設成"文字文件",
並存在D槽的"source資料夾裡"

在網路上找一button程式的範例,貼到wordpad上,
注意此程式的檔名為"Work2",所以必須更改存檔的檔名,
改成"Work2.java" (注意!!須將副檔名改為java)

編譯並且執行,可看到出現一button

原本的程式是設成讓按鈕越按越大(SizeW * 2與SizeH*2),
我們可以將它改成越按越小,將原本size改成1810*560
然後將SizeW*2與SizeH*2改成SizeW*0.5與SizeH*0.5,
(注意!!前面必須加上int,因為frame必須用int計算)


加上一行import java.awt.*; 可以在Java資料夾裡的壓縮檔找到,
"import"代表把底下的資料都叫進來,
"*"代表所有的

將不會用到的前面加上//代表註解

新增一frame,圖中紅色框框所示是代表能讓視窗的"X"執行,
這樣視窗才不會關不掉!!

加入一button,編譯並執行,就會出現button

將button改成checkbox,就會看到checkbox!!

2011年3月4日 星期五

第3次上課-基本架構與矩陣


進到demo\applets\Animator可以看到許多examples


到D:\Java\jdk1.6.0_24\bin複製網址並貼上後面打上\java.exe,若有出現許多文字,代表有找到此檔案
(路徑不可有空白)
 

到wordpad開一檔案,將檔名改為"Test20110304.java"存在D槽的"source"裡
將路徑改到D:\source>並貼上D:\Java\jdk1.6.0_24\bin再打上javac Test20110304.java編譯
java Test20110304執行
會出現錯誤,要在wordpad裡打上如圖中的基本架構才對


int x 代表 宣告x
x=Integer.parseInt(args[0]);便是將字串string轉換成整數int


輸入數字並輸出


args[]中括號裡的數字代表讀取第幾個數字
若是0則讀取第1個數字
若是1則讀取第2個數字


設定各參數
並且打出(x*a)+(y*b)
代表一2*1的矩陣乘上一1*2的矩陣
輸出結果