?? java入門(mén)(9) java與gui.htm
字號(hào):
<BR>panel1.add(setbeep); <BR>panel1.add(setcounter); <BR>colorSel=new
CheckboxGroup(); <BR>red=new Checkbox("Set red",colorSel,true);
<BR>green=new Checkbox("Set green",colorSel,false); <BR>blue=new
Checkbox("Set blue",colorSel,false); <BR>panel1.add(red);
<BR>panel1.add(green); <BR>panel1.add(blue); <BR>red.addItemListener(new
ItemListener() <BR>{ <BR>public void itemStateChanged(ItemEvent evt) <BR>{
<BR>if(evt.getStateChange()==ItemEvent.SELECTED)
<BR>button1.setForeground(Color.red); <BR>} <BR>});
<BR>green.addItemListener(new ItemListener() <BR>{ <BR>public void
itemStateChanged(ItemEvent evt) <BR>{
<BR>if(evt.getStateChange()==ItemEvent.SELECTED)
<BR>button1.setForeground(Color.green); <BR>} <BR>});
<BR>blue.addItemListener(new ItemListener() <BR>{ <BR>public void
itemStateChanged(ItemEvent evt) <BR>{
<BR>if(evt.getStateChange()==ItemEvent.SELECTED)
<BR>button1.setForeground(Color.blue); <BR>} <BR>}); <BR>button1=new
JButton("Press me"); <BR>panel1.add(button1);
<BR>button1.addActionListener(new ActionListener() <BR>{ <BR>public void
actionPerformed(ActionEvent evt) <BR>{ <BR>doButton1Action(); <BR>}
<BR>}); <BR>} <BR>public void doButton1Action() <BR>{ <BR>if
(setbeep.getState()) <BR>Toolkit.getDefaultToolkit().beep(); <BR>if
(setcounter.getState()) <BR>button1.setText("press:
"+String.valueOf(++counter)); <BR>else <BR>button1.setText("Press me");
<BR>} <BR>} <BR><BR><BR><BR> 2.使用javac編譯這個(gè)程序,然后編輯一個(gè)顯示這個(gè)Java Applet的頁(yè)面:
<BR><BR> 源程序:useCheckbox.html <BR><BR><BR><html><body>
<BR><applet code="useCheckbox.class" width=320 height=150>
<BR></applet> <BR></body></html>
<BR><BR><BR><BR> 4.最后使用appletviewer來(lái)運(yùn)行這個(gè)程序,這個(gè)程序的輸出如下圖所示:
<BR><BR><BR> 圖9-5 程序useCheckbox的運(yùn)行結(jié)果 <BR><BR> 傳授新知
<BR><BR> 從我們學(xué)習(xí)Java開(kāi)始,這個(gè)示例程序是大家遇到的最長(zhǎng)的一個(gè)。大家不要被它嚇退,這個(gè)程序閱讀起來(lái)一樣并不困難。下面,我們就對(duì)程序做一些點(diǎn)評(píng)。
<BR><BR> 1) <BR><BR><BR>setbeep=new Checkbox("Beep when press button");
<BR>setcounter=new Checkbox("Counter press time");
<BR>panel1.add(setbeep); <BR>panel1.add(setcounter);
<BR><BR><BR><BR> 在這一段程序中,我們定義了兩個(gè)Checkbox:setbeep和setcounter。什么是Checkbox呢?如下圖所示:
<BR><BR><BR> 圖9-6 復(fù)選框
<BR><BR> 在Java語(yǔ)言中,Checkbox類(lèi)定義了復(fù)選框。復(fù)選框用來(lái)讓用戶做出某種選擇,正如上圖所示,允許選中多個(gè)復(fù)選框。
<BR><BR> 在前兩句中,我們使用new創(chuàng)建了這兩個(gè)復(fù)選框;而在后兩句中,我們使用容器Panel的add方法將它們裝入Panel。
<BR><BR> 2) <BR><BR><BR>colorSel=new CheckboxGroup(); <BR>red=new
Checkbox("Set red",colorSel,true); <BR>green=new Checkbox("Set
green",colorSel,false); <BR>blue=new Checkbox("Set blue",colorSel,false);
<BR>panel1.add(red); <BR>panel1.add(green); <BR>panel1.add(blue);
<BR><BR><BR><BR> 而這一段程序則是用來(lái)定義red、green和blue三個(gè)單選按鈕。在Java語(yǔ)言中,單選按鈕被看作是一組特殊的復(fù)選框。我們使用一個(gè)CheckboxGroup將它們組成一個(gè)組,這樣就只允許這個(gè)組里的“復(fù)選框”只能有一定被選中,這就形成了單選按鈕。
<BR><BR> 單選按鈕與復(fù)選框在外觀上也不同:復(fù)選框是一個(gè)正方形的小框,而單選按鈕則是一個(gè)小小的圓,如下圖所示:
<BR><BR><BR> 圖9-7 單選按鈕
<BR><BR> 在上面的程序中,我們首先定義了一個(gè)組:colorSel。接下來(lái)的三條語(yǔ)句使用new操作符創(chuàng)建了三個(gè)Checkbox,并在參數(shù)列表中指定了它所在的組,其語(yǔ)法格式為:
<BR><BR> 單選按鈕名=new Checkbox(“提示文本”,所在組名,初值);
<BR><BR> 其中初值是布爾型的:true表示選中,false表示未選中。 <BR><BR> 注意:
<BR><BR> 一組單選按鈕中僅能有一個(gè)按鈕的初值是true,因?yàn)槭恰皢芜x”嘛。
<BR><BR> 最后,我們?cè)俅握{(diào)用了panel的add方法,將它們裝入容器panel中。 <BR><BR> 3)
<BR><BR><BR>red.addItemListener(new ItemListener() <BR>{ <BR>public void
itemStateChanged(ItemEvent evt) <BR>{
<BR>if(evt.getStateChange()==ItemEvent.SELECTED)
<BR>button1.setForeground(Color.red); <BR>} <BR>});
<BR><BR><BR><BR> 這段程序用到了許多我們沒(méi)有遇到過(guò)的東西!不過(guò)不要緊,做為初學(xué)者還是要學(xué)會(huì)“黑盒子”學(xué)習(xí)方法,也就是在學(xué)習(xí)的初級(jí)階段要將某些東西當(dāng)作一個(gè)整體來(lái)接受,而不是每一個(gè)都要剖析清楚,那樣就會(huì)影響學(xué)習(xí)效果的。正如這段程序,大家只要會(huì)用,會(huì)理解就行了,不一定要搞懂為什么這么寫(xiě)。
<BR><BR> 第一行中red.addItemListener用來(lái)為單選按鈕red增加一個(gè)監(jiān)測(cè)器。監(jiān)測(cè)什么呢?第3行說(shuō)明監(jiān)測(cè)itemStateChanged(狀態(tài)改變時(shí))。第5行說(shuō)明當(dāng)監(jiān)測(cè)到狀態(tài)改變時(shí),就判斷改變后的狀態(tài)是不是“選中”的。如果是,就執(zhí)行第6行,將按鈕button1的前景色設(shè)置為紅色。
<BR><BR> 在后面的兩段中,我們采用相同的方法為單選按鈕green和blue分別創(chuàng)建了一個(gè)監(jiān)測(cè)器,使得當(dāng)其被“選中”時(shí),就將按鈕button1的前景色設(shè)置為相應(yīng)的顏色(綠色和藍(lán)色)。
<BR><BR> 4) <BR><BR><BR>button1.addActionListener(new ActionListener()
<BR>{ <BR>public void actionPerformed(ActionEvent evt) <BR>{
<BR>doButton1Action(); <BR>} <BR>});
<BR><BR><BR><BR> 這一段程序,我們?cè)?.2小節(jié)中就遇到過(guò)。它是用來(lái)為按鈕button1創(chuàng)建一個(gè)監(jiān)測(cè)器。不同的是,當(dāng)時(shí)我們是直接說(shuō)明了當(dāng)按鈕按下時(shí)所要執(zhí)行的語(yǔ)句。而在此,我們則是讓其去執(zhí)行一個(gè)doButton1Action方法。這個(gè)方法,是在我們后面的程序中定義的。
<BR><BR> 5) <BR><BR><BR>public void doButton1Action() <BR>{ <BR>if
(setbeep.getState()) <BR>Toolkit.getDefaultToolkit().beep(); <BR>if
(setcounter.getState()) <BR>button1.setText("press:
"+String.valueOf(++counter)); <BR>else <BR>button1.setText("Press me");
<BR>}
<BR><BR><BR><BR> 這就是當(dāng)按下按鈕button1時(shí),執(zhí)行的方法doButton1Action。整個(gè)方法可以分為兩個(gè)部分的工作:
<BR><BR> 其一是: <BR><BR><BR>if (setbeep.getState())
<BR>Toolkit.getDefaultToolkit().beep();
<BR><BR><BR><BR> 即,首先判斷復(fù)選框setbeep否被選中(使用復(fù)選框的getState方法獲得其狀態(tài),如果被選中,返回true;如果未被選中,返回false)。如果被選中,就響鈴。
<BR><BR> 把整個(gè)程序邏輯串起來(lái)講就是:當(dāng)按鈕button1按下時(shí),將檢查復(fù)選框setbeep是否被選中,如果被先中,就響鈴,否則無(wú)任何反應(yīng)。
<BR><BR> 其二是: <BR><BR><BR>if (setcounter.getState())
<BR>button1.setText("press: "+String.valueOf(++counter)); <BR>else
<BR>button1.setText("Press me");
<BR><BR><BR><BR> 即,首先判斷復(fù)選框setcounter是否被選中。如果被選中,則改變按鈕button1的顯示文本,將其改為press:按下總次數(shù);否則,讓其顯示最初的“Press
me”。 <BR><BR> 自測(cè)練習(xí) <BR><BR> 1) 在Java語(yǔ)言中,復(fù)選框類(lèi)名是____________。
<BR><BR> a.Button b.Checkbox c.checkBox d.Label <BR><BR> 2)
在Java語(yǔ)言中,單選框類(lèi)名是____________。 <BR><BR> a.Label b.checkBox c.Button
d.Checkbox <BR><BR> 3)
假設(shè)有cb1、cb2、cb3三個(gè)對(duì)象,屬于同一個(gè)CheckboxGroup,則它們是________。 <BR><BR> a.單選按鈕 b.復(fù)選框
<BR><BR> 4) 復(fù)選框的外觀是________。 <BR><BR> a.一個(gè)小正方形 b.一個(gè)小圓形 c.一個(gè)小三角形
<BR><BR> 5) 單選框的外觀是________。 <BR><BR> a.一個(gè)小正方形 b.一個(gè)小圓形 c.一個(gè)小三角形
<BR><BR> 6) 編寫(xiě)一段程序,使其運(yùn)行結(jié)果如下圖所示: <BR><BR><BR> 圖9-8 練習(xí)903題圖
<BR><BR> 并且,當(dāng)選中了NO.1,則按鈕顯示為NO.1;選中了NO.2,則按鈕顯示為NO.2。
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> ____________________________________________________________________
<BR><BR> 練習(xí)答案 <BR><BR> 1)b 復(fù)選框類(lèi)名為Checkbox,第一個(gè)字母“C”是大寫(xiě)字母。 <BR><BR> 2)d
單選按鈕也是Checkbox,與復(fù)選框的不同是,單選按鈕是屬于一個(gè)CheckboxGroup的。 <BR><BR> 3)a
加入了同一個(gè)CheckboxGroup,就成為一組,一組中僅有一個(gè)能夠被選中,稱為單選按鈕。 <BR><BR> 4)a 請(qǐng)參看圖9-6。
<BR><BR> 5)b 請(qǐng)參看圖9-7。 <BR><BR> 6)以下是一個(gè)實(shí)現(xiàn)實(shí)例: <BR><BR> 源程序:lianxi903.java
<BR><BR><BR>import javax.swing.*; <BR>import java.awt.*; <BR>import
java.awt.event.*; <BR>public class lianxi903 extends JApplet <BR>{
<BR>JButton button1; <BR>Checkbox theOne,theTwo; <BR>CheckboxGroup cbg1;
<BR>public void init() <BR>{ <BR>JPanel panel1=(JPanel)getContentPane();
<BR>panel1.setLayout(new FlowLayout()); <BR>cbg1=new CheckboxGroup();
<BR>theOne=new Checkbox("NO.1",cbg1,true); <BR>theTwo=new
Checkbox("NO.2",cbg1,false); <BR>button1=new JButton("Button");
<BR>panel1.add(theOne); <BR>panel1.add(theTwo); <BR>panel1.add(button1);
<BR>theOne.addItemListener(new ItemListener() <BR>{ <BR>public void
itemStateChanged(ItemEvent evt) <BR>{
<BR>if(evt.getStateChange()==ItemEvent.SELECTED)
<BR>button1.setText("NO.1"); <BR>} <BR>}); <BR>theTwo.addItemListener(new
ItemListener() <BR>{ <BR>public void itemStateChanged(ItemEvent evt) <BR>{
<BR>if(evt.getStateChange()==ItemEvent.SELECTED)
<BR>button1.setText("NO.2"); <BR>} <BR>}); <BR>} <BR>}
<BR><BR><BR><BR> 9.5 使用列表框 <BR><BR> 實(shí)例說(shuō)明
<BR><BR> 1.首先,我們使用文字編輯軟件輸入下源程序。 <BR><BR> 源程序:useList.java
<BR><BR><BR>import javax.swing.*; <BR>import java.awt.*; <BR>import
java.awt.event.*; <BR>public class useList extends JApplet <BR>{ <BR>Label
label1; <BR>List colorList; <BR>public void init() <BR>{ <BR>JPanel
panel1=(JPanel)getContentPane(); <BR>panel1.setLayout(new FlowLayout());
<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>label1=new
Label("You selected red"); <BR>label1.setForeground(Color.red);
<BR>panel1.add(label1); <BR>colorList.addItemListener(new ItemListener()
<BR>{ <BR>public void itemStateChanged(ItemEvent evt) <BR>{ <BR>String
selString; <BR>String sel; <BR>int selNum;
<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>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>});
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -