?? java入門(9) java與gui.htm
字號:
<BR>} <BR>} <BR><BR><BR><BR> 2.使用javac編譯這個程序,然后編輯一個顯示這個Java Applet的頁面:
<BR><BR> 3.最后使用appletviewer來運行這個程序,這個程序的輸出如下圖所示: <BR><BR><BR> 圖9-9
程序useList的運行結果 <BR><BR> 當你選擇green后,標簽將以綠色顯示You selected
green;而若你選擇blue后,標簽將以藍色顯示You selected blue。 <BR><BR> 傳授新知
<BR><BR> 這一節中,我們將遇到一個新的部件---列表框。下面,就對剛才這個程序做一些點評。 <BR><BR> 1)
<BR><BR><BR>colorList=new List(); <BR>colorList.add("red");
<BR>colorList.add("green"); <BR>colorList.add("blue");
<BR>colorList.select(0); <BR>panel1.add(colorList);
<BR><BR><BR><BR> 在這一段程序中,我們定義了一個列表框List:colorList。列表框用來將多個表項列出來,以供用戶選擇,如下圖所示:
<BR><BR><BR> 圖9-10 列表框
<BR><BR> 首先,我們使用new操作符創建一個colorList,然后調用列表框的add方法,增加可供選擇的表項(red、green和blue)。最后,使用select方法,使得缺省選擇是red(第0項)。
<BR><BR> 最后使用容器Panel的add方法將它們裝入Panel。 <BR><BR> 一些提示:
<BR><BR> 如果要讓缺省選擇的是blue,則應該使用colorList.select(2)。
<BR><BR> 為列表框的指定位置上增加項目,可以使用方法: <BR><BR><BR>public synchronized void
add(String item,int index)
<BR><BR><BR><BR> 其中,item是一個字符串,用來存放要顯示的標簽文本。而index則是添加的位置。列表框的位置是一個從0開始的數,所以,如果用戶在位置0處增加項目,那么該項目將增加在列表框的頂部。如果用戶試圖在-1處或大于列表框中項目數(甚至象例子中,不給出index參數)的位置上增加項目,那么將增加到列表框的末尾。
<BR><BR> 如果你想刪除某一項,則可以使用方法: <BR><BR><BR>public synchronized void
remove(int position)
<BR><BR><BR><BR> 其中position就是你要刪除項目的位置。如果你想刪除掉所有的項,則可調用方法:
<BR><BR><BR>public synchronized void removeAll() <BR><BR><BR><BR> 2)
<BR><BR><BR>colorList.addItemListener(new ItemListener() <BR>{ <BR>public
void itemStateChanged(ItemEvent evt) <BR>{ <BR>…… <BR>} <BR>});
<BR><BR><BR><BR> 與其它部件一樣,可以使用addItemListener方法為其設置一個監測器,當列表框選擇項改變時就會激活這個監測器。
<BR><BR> 3) <BR><BR><BR>if(evt.getStateChange()==ItemEvent.SELECTED)
<BR>{ <BR>selNum=colorList.getSelectedIndex();
<BR>sel=colorList.getItem(selNum); <BR>selString="You selected "+sel;
<BR>label1.setText(selString);
<BR><BR><BR><BR> 在這一段程序中,我們首先調用了列表框的getSelectedIndex
()方法取得你所選擇項目的編號。這個項目返回的是一個整型的索引號。
<BR><BR> 接著,我們再使用這個索引號調用列表框的getItem方法獲取該項目的標簽文本。
<BR><BR> 為了讓標簽中顯示的文本更加清晰、易懂,我們在標簽文本的前面加上了“You
Selected”,然后調用標簽label1的setText方法改變標簽所顯示的文本。 <BR><BR> 4)
<BR><BR><BR>switch(selNum) <BR>{ <BR>case 0:
<BR>label1.setForeground(Color.red); <BR>break; <BR>case 1:
<BR>label1.setForeground(Color.green); <BR>break; <BR>case 2:
<BR>label1.setForeground(Color.blue); <BR>break; <BR>}
<BR><BR><BR><BR> 這是一個多分支結構,它根據所選擇的項目編號(前面,我們已經調用getSelectedIndex
()方法取得了項目編號,存放在變量selNum中)來做相應的操作。 <BR><BR><BR><1> case
0:假設selNum=0,那么就執行 <BR>label1.setForeground(Color.red); <BR>break;
<BR><BR><BR><BR> 也就是,將標簽label1的前景色(字的顏色)設置為紅色,然后退出switch-case語句。
<BR><BR><BR><2> case 1:假設selNum=1,那么就執行
<BR>label1.setForeground(Color.green); <BR>break;
<BR><BR><BR><BR> 將標簽label1的前景色設置為綠色,然后退出switch-case語句。
<BR><BR><BR><3> case 2:假設selNum=2,那么就執行
<BR>label1.setForeground(Color.blue); <BR>break;
<BR><BR><BR><BR> 將標簽label1的前景色設置為藍色,然后退出switch-case語句。
<BR><BR> 文本,將其改為press:按下總次數;否則,讓其顯示最初的“Press me”。 <BR><BR> 自測練習
<BR><BR> 1) 在程序中要構建一個列表框,要使用_________類。 <BR><BR> a.Checkbox b.Listbox
c.List d.Label <BR><BR> 2) 列表框中第一項的項目編號(也稱索引)是________。 <BR><BR> a.0 b.1
c.-1 d.10 <BR><BR> 3) 假設有一個列表框listbox1,要在其最后添加一項,應使用________________語句。
<BR><BR> a.listbox.add(“The end item”,0) b. listbox.add(“The end
item”,10) <BR><BR> c. listbox.add(“The end item”,-1) d. listbox.add(“The
end item”, 1) <BR><BR> 4) 我們可以使用__________________方法,取得當前選擇的項目的索引值。
<BR><BR> a. getSelectedIndex() b. getItem() c. getNumber() <BR><BR> 5)
編寫一段程序,使其運行結果如下圖所示: <BR><BR><BR> 圖9-11 練習903題圖
<BR><BR> 當按下Add按鈕,就在列表框上增加一項:No.x(x是順序號),當按下Remove按鈕,就刪除最后一項。
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> 練習答案 <BR><BR> 1)c 在Java中,類List實現了列表框。 <BR><BR> 2)a 從0開始,而不是1。
<BR><BR> 3)c
要在這后一項添加有三種方法。其一:以-1為位置參數;其二:以大于最大項目索引數的數為位置參數;其三:不帶位置參數。因此在此,只有c。
<BR><BR> 4)a getItem是獲得顯示的內容。 <BR><BR> 5)下面,我們給出一個實現的實例。
<BR><BR> 源程序:lianxi904.java <BR><BR><BR>import javax.swing.*; <BR>import
java.awt.*; <BR>import java.awt.event.*; <BR>public class lianxi904
extends JApplet <BR>{ <BR>List listbox1; <BR>JButton
buttonAdd,buttonRemove; <BR>int counter=0; <BR>public void init() <BR>{
<BR>JPanel panel1=(JPanel)getContentPane(); <BR>panel1.setLayout(new
FlowLayout()); <BR>listbox1=new List(); <BR>buttonAdd=new JButton("Add");
<BR>buttonRemove=new JButton("Remove"); <BR>panel1.add(listbox1);
<BR>panel1.add(buttonAdd); <BR>panel1.add(buttonRemove);
<BR>buttonAdd.addActionListener(new ActionListener() <BR>{ <BR>public void
actionPerformed(ActionEvent evt) <BR>{
<BR>listbox1.add("NO."+String.valueOf(counter++)); <BR>} <BR>});
<BR>buttonRemove.addActionListener(new ActionListener() <BR>{ <BR>public
void actionPerformed(ActionEvent evt) <BR>{
<BR>listbox1.remove(counter-1); <BR>counter-=1; <BR>} <BR>}); <BR>} <BR>}
<BR><BR><BR><BR> 9.6 使用文本部件 <BR><BR> 9.6.1 普通文本框 <BR><BR> 實例說明
<BR><BR> 1.編輯以下源程序,生成useText.java文件。 <BR><BR> 源程序:useTextfield.java
<BR><BR><BR>import javax.swing.*; <BR>import java.awt.*; <BR>import
java.awt.event.*; <BR>public class useTextfield extends JApplet <BR>{
<BR>JButton buttonOK; <BR>JTextField text1; <BR>public void init() <BR>{
<BR>JPanel panel1=(JPanel)getContentPane(); <BR>panel1.setLayout(new
FlowLayout()); <BR>buttonOK=new JButton("OK"); <BR>text1=new
JTextField(20); <BR>panel1.add(text1); <BR>panel1.add(buttonOK);
<BR>buttonOK.addActionListener(new ActionListener() <BR>{ <BR>public void
actionPerformed(ActionEvent evt) <BR>{ <BR>showStatus(text1.getText());
<BR>} <BR>}); <BR>} <BR>} <BR><BR><BR><BR> 2.使用javac編譯這個程序,然后編輯一個顯示這個Java
Applet的頁面: <BR><BR> 3.最后使用appletviewer來運行這個程序,這個程序的輸出如下圖所示:
<BR><BR><BR> 圖9-12 程序useTextfield.java的運行結果(1)
<BR><BR> 正如上圖所示,屏幕上出現了一個寬度為20的文本框和一個OK按鈕。我們可以在這個文本框內寫入字符。我們輸入“Haha,I’m
writing to Java’s TextField!!”,然后單擊OK按鈕,這時屏幕變為: <BR><BR><BR> 圖9-13
程序useTextfield.java的運行結果(2) <BR><BR> 也就是,我們按下OK按鈕后,在狀態欄上出現了我們輸入的文本信息。
<BR><BR> 傳授新知
<BR><BR> 多次閱讀Java語言源程序,應該為大家積累了不少經驗,我想大家在閱讀這個程序的時候,因為不再覺得那么費勁了吧。如果你還是覺得讀程序是一件痛苦的事的話,我希望你還是好好反省一下,看前面的章節時是不是走馬觀花了。
<BR><BR> 好了,言歸正傳,我們一起來看一下上面的這個程序。這個程序中的大部分語句,大家應該都耳熟能詳了,陌生的只有關于本小節的主人公---文本框TextField的語句了:
<BR><BR> 1) <BR><BR><BR>JTextField text1; <BR>…… <BR>text1=new
JTextField(20);
<BR><BR><BR><BR> 首先,我們定義了一個JTextField類的對象text1,然后使用new操作符來創建這個對象text1(也就是一個文本框)
<BR><BR> 大家還記得new后面的這個與類名相同的方法稱為什么嗎?對,構造器。這個類有三種帶不同參數的構造器。 <BR><BR> A.
JTextField(int columns)
<BR><BR> 第一種構造器,就是我們在本例中調用的那個,它帶了一個整型參數columns,這個單詞的中文意思是列,也就是說,這個參數指定了我們要創建的TextField的列寬。這里的列寬指長度,而不是可包含的字符數。
<BR><BR> 那么20,到底是多少寬呢?Java是這樣定義的: <BR><BR> 能夠顯示20個小寫“m”(當前選擇的字體)的寬度。
<BR><BR> 注意:
<BR><BR> 得再次強調一下,這里的列寬是一種長度,而不是字符數。你可以試一試,在我們這個程序執行后,再這個文本框中輸入小寫字母“m”,看一看能夠輸入多少個。但大家也應該注意到,我們在例子中輸入的字符數遠不止20個。
<BR><BR> B. JTextField(String text)
<BR><BR> 第二種構造器則帶的是一個字符串型參數text,這個字符串將會在程序一執行時就顯示在文本框中。
<BR><BR> C.JTextField(String text,int columns)
<BR><BR> 而如果你既想設置默認的字符串,又想設置它的寬度,就可以調用第三種構造器。 <BR><BR> 注意:
<BR><BR> 調用JTextField的構造器時,一定要帶上參數,否則將會出錯。 <BR><BR> 2)
<BR><BR><BR>buttonOK.addActionListener(new ActionListener() <BR>{
<BR>public void actionPerformed(ActionEvent evt) <BR>{
<BR>showStatus(text1.getText()); <BR>} <BR>});
<BR><BR><BR><BR> 大家看到這個語句,應該不會感到陌生吧!它為按鈕buttonOK增加一個監測器,監測是否按下按鈕。如果按下按鈕,就執行:showStatus(text1.getText())語句。
<BR><BR> 這個語句中,有兩個新的知識。 <BR><BR> 其一是:showStatus(String
test)方法,它用來在狀態欄上顯示字符串。
<BR><BR> 其二是:getText()方法,它是JTextField類的一個成員方法,用來獲取文本框內的文本。例如本例中text1.getText()就將獲得文本框text1中的文本。也就是我們輸入的那些東西。
<BR><BR> 整個串起來,得到: <BR><BR> 當我們按下OK按鈕時,程序將獲取文本框text1中的文本,然后將它們顯示到狀態欄上。
<BR><BR> 用getText()方法可以獲取文本框中的文本,相應的,我們可以使用setText()方法設置文本框中的文本。其語法是:
<BR><BR> 文本框對象.setText(String text) <BR><BR> 這樣,就將文本框中的文本改成了字符串text。
<BR><BR> 除此之外,我們還可以使用setHorizontalAlignment方法來設置字符串中文本的對齊方式,具體來說:
<BR><BR> setHorizontalAlignment(Swing constants.CENTER) 居中對齊
<BR><BR> setHorizontalAlignment(Swing constants.LEFT) 左對齊
<BR><BR> setHorizontalAlignment(Swing constants.RIGHT) 右對齊
<BR><BR> 9.6.2 口令文本框 <BR><BR> 傳授新知
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -