第6章圖形用戶界面_第1頁
第6章圖形用戶界面_第2頁
第6章圖形用戶界面_第3頁
第6章圖形用戶界面_第4頁
第6章圖形用戶界面_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第十章常用組件

Swing概述javax.Swing定義了相對于java.awt包更多、更強(qiáng)的功能。事件響應(yīng)原理

設(shè)計(jì)和實(shí)現(xiàn)圖形用戶界面的工作主要有兩個(gè):1.創(chuàng)建組成界面的各種成分和元素2.定義圖形用戶界面的事件和各界面元素對不同事件的響應(yīng)

事件響應(yīng)原理

事件驅(qū)動(dòng)機(jī)制--委托事件模型

將事件的處理委托給獨(dú)立的對象,而不是組件本身,從而將使用者界面與程序邏輯分開

由產(chǎn)生事件的對象(事件源)、事件對象以及監(jiān)聽者對象所組成。產(chǎn)生事件的對象會(huì)在事件產(chǎn)生時(shí),將與該事件相關(guān)的信息封裝在一個(gè)稱之為“事件對象”的對象中,監(jiān)聽者對象根據(jù)該事件對象內(nèi)的信息決定適當(dāng)?shù)奶幚矸绞?。對?yīng)不同事件需要不同的事件監(jiān)聽者

JLable組件標(biāo)簽只起信息說明的作用,而不接受用戶的輸入,也無事件響應(yīng)。構(gòu)造方法

JLable()JLable(Iconicon)JLable(Iconicon,inthalig)排列方式(LEFT、CENTER、RIGHT、LEADING和TRAILING)JLable(Stringtext)JLable(Stringtext,inthalig)JLable(Stringtext,Iconicon,inthalig)常用方法IcongetIcon()voidsetIcon(Iconicon)StringgetText()voidsetText(Stringlable)JButton組件和JToggleButton組件

Swing組件中的按鈕的特殊效果

(1)改變按鈕的圖標(biāo),即一個(gè)按鈕可以有多個(gè)圖標(biāo),可根據(jù)Swing按鈕所處的狀態(tài)而自動(dòng)變換不同的圖標(biāo)。(2)為按鈕加入提示,即當(dāng)鼠標(biāo)在按鈕上稍做停留時(shí),在按鈕邊可出現(xiàn)提示,當(dāng)鼠標(biāo)移出按鈕時(shí),提示自動(dòng)消失。(3)在按鈕上設(shè)置快捷鍵。(4)設(shè)置默認(rèn)按鈕,即通過回車鍵運(yùn)行此按鈕的功能。JToggleButton按鈕與JButton按鈕的區(qū)別僅在于:當(dāng)按下JButton按鈕并釋放鼠標(biāo)后,按鈕會(huì)自動(dòng)彈起;而按下JToggleButton按鈕并釋放鼠標(biāo)后,按鈕不會(huì)自動(dòng)彈起,除非再按一次。

JButton類的構(gòu)造方法

JButton()JButton(Stringtext)JButton(Iconicon)JButton(Stringtext,Iconicon)JToggleButton類的構(gòu)造方法JToggleButton()JToggleButton(Stringtext)JToggleButton(Stringtext,booleanselected)JToggleButton(Iconicon)JToggleButton(Iconicon,booleanselected)JToggleButton(Stringtext,Iconicon)JToggleButton(Stringtext,Iconicon,booleanselected)

成員方法

IcongetIcon()voidsetIcon(Iconicon)StringgetLabel()voidsetLabel(Stringlable)addActionListener(ActionListenerI)setPressedIcon(Iconpricon)設(shè)置按鈕按下時(shí)的圖標(biāo)voidsetRolloverIcon(Iconroicon)設(shè)置鼠標(biāo)經(jīng)過時(shí)按鈕的圖標(biāo)setEnabled(booleanb)設(shè)定按鈕是否禁用voidsetSelected(booleanb)設(shè)置按鈕的狀態(tài)voidsetText(Stringtext)設(shè)置按鈕的文本booleanisSelected()獲取按鈕狀態(tài)IconActionEventActionEvent類包含在AWT包中觸發(fā)這個(gè)事件的動(dòng)作包括:單擊按鈕;雙擊一個(gè)列表中的選項(xiàng);選擇菜單項(xiàng);在文本框中輸入回車等

ActionEvent類可使用的主要方法getSource()方法:用來獲取引發(fā)事件的對象名。getActionCommand()方法:用來獲取對象的標(biāo)簽或事先為這個(gè)對象設(shè)置的命令名。事件處理的步驟創(chuàng)建組件對象為可能發(fā)生事件的對象注冊監(jiān)聽在實(shí)現(xiàn)監(jiān)聽接口的類中改寫該接口中定義的所有的抽象方法在抽象方法體中寫入事件響應(yīng)的代碼事件響應(yīng)實(shí)現(xiàn)接口ActionListener;響應(yīng)動(dòng)作事件

publicvoidactionPerformed(ActionEvente)

編寫一個(gè)程序單擊按鈕時(shí)改變標(biāo)簽文本與按鈕文本的內(nèi)容。importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclassc10_1extendsJAppletimplementsActionListener

{Containercp=getContentPane();

Iconro=newImageIcon("g1.gif");

Iconge=newImageIcon("g2.gif");

Iconpr=newImageIcon("g3.gif");

JButtonbt=newJButton();

Iconicon=newImageIcon("g4.jpg");

JLabellb=newJLabel("Java",icon,JLabel.CENTER);

publicvoidinit()

{

bt.setRolloverEnabled(true);

bt.setText("OK");

bt.setHorizontalTextPosition(JLabel.CENTER);

bt.setVerticalTextPosition(JLabel.BOTTOM);

cp.add(lb,BorderLayout.NORTH);

cp.add(bt,BorderLayout.SOUTH);

bt.setIcon(ge);

bt.setRolloverIcon(ro);

bt.setPressedIcon(pr);

bt.addActionListener(this);

}publicvoidactionPerformed(ActionEvente)

{

if(e.getSource()==bt)

{

if(lb.getText()=="Hello")

lb.setText("你好!");

else

lb.setText("Hello");

if(bt.getText()=="OK")

bt.setText("確定");

else

bt.setText("OK");

}

}

}JCheckBox和JRadioButton組件

JCheckBox類的構(gòu)造方法

JCheckBox()JCheckBox(Stringtext)JCheckBox(Stringtext,booleanselected)JCheckBox(Iconicon)JCheckBox(Iconicon,booleanselected)JCheckBox(Stringtext,Iconicon)JCheckBox(Stringtext,Iconicon,booleanselected)JRadioButton的構(gòu)造方法JRadioButton()JRadioButton(Stringtext)JRadioButton(Stringtext,booleanselected)JRadioButton(Iconicon)JRadioButton(Iconicon,booleanselected)JRadioButton(Stringtext,Iconicon)JRadioButton(Stringtext,Iconicon,booleanselected)如何實(shí)現(xiàn)選項(xiàng)按鈕的單選功能定義組javax.swing.ButtonGroupButtonGroupbg=newButtonGroup();定義選項(xiàng)按鈕

r1=newJRadioButton("10");

r2=newJRadioButton("16");

將按鈕添加到組里

bg.add(r1);

bg.add(r2);

常用方法同JButton組件和JToggleButton組件

ItemEvent

引發(fā)這類事件的動(dòng)作包括:

(1)改變復(fù)選框JCheckbox對象的選中或不選中狀態(tài);

(2)改變單選按鈕JRadioButton對象的選中或不選中狀態(tài);

(3)改變下拉列表框JComboBox對象中選項(xiàng)的選中或不選中狀態(tài);

(4)改變菜單項(xiàng)JMenuItem對象中選項(xiàng)的選中或不選中狀態(tài);

(5)改變JCheckboxMenuItem對象中選項(xiàng)的選中或不選中狀態(tài)。

ItemEvent類的主要方法

1)ItemSelectablegetItemSelectable()

返回引發(fā)選中狀態(tài)變化的事件源.此外,ItemEvent類的事件也可以使用其父類EventObject類提供的getSource()方法返回引發(fā)選中狀態(tài)變化的事件源。2)ObjectgetItem()

返回引發(fā)選中狀態(tài)變化事件的具體選擇項(xiàng),3)intgetStateChange()

返回此組件到底有沒有被選中。它的返回值是靜態(tài)常量SELECTED(代表選項(xiàng)被選中)和DESELECTED(代表選項(xiàng)被放棄或不選)事件響應(yīng)

對象名.addItemListener(this);

引用ItemListener中的itemStateChanged(ItemEvente)方法響應(yīng)對象的狀態(tài)改變

根據(jù)復(fù)選框、與選擇按鈕來改變標(biāo)簽組件的文本大小及顏色importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;

publicclassc10_2extendsJAppletimplements

ItemListener,ActionListener

{

inti1=0,i2=0,i3=0;

intfonti=10;

Fontfont;

Containerctp=getContentPane();

JLabellb=newJLabel("請選擇");

JCheckBoxcb1,cb2,cb3;

JRadioButtonr1,r2,r3;

ButtonGroupbg=newButtonGroup();publicvoidinit()

{

ctp.setLayout(newFlowLayout());

cb1=newJCheckBox("紅色",false);

cb1.addItemListener(this);

ctp.add(cb1);

cb2=newJCheckBox("綠色",false);

cb2.addItemListener(this);

ctp.add(cb2);

cb3=newJCheckBox("藍(lán)色",false);

cb3.addItemListener(this);

ctp.add(cb3);

r1=newJRadioButton("10");

r1.addActionListener(this);

ctp.add(r1);

r2=newJRadioButton("16");

r2.addActionListener(this);

ctp.add(r2);

r3=newJRadioButton("24");

r3.addActionListener(this);

ctp.add(r3);bg.add(r1);bg.add(r2);bg.add(r3);

ctp.add(lb);

}publicvoiditemStateChanged(ItemEvente)

{JCheckBoxcbx=(JCheckBox)e.getItem();

if(cbx.getText()=="紅色")

{if(e.getStateChange()==e.SELECTED)

i1=255

else

i1=0;

}

if(cbx.getText()=="綠色")

{

if(e.getStateChange()==e.SELECTED)

i2=255;

else

i2=0;

}

if(cbx.getText()=="藍(lán)色")

{

if(cbx.isSelected())

i3=255;

else

i3=0;

}

font=newFont("宋體",Font.BOLD,fonti);

lb.setFont(font);

lb.setForeground(newColor(i1,i2,i3));

}publicvoidactionPerformed(ActionEvente)

{Stringrbt=e.getActionCommand();

if(rbt=="10")fonti=10;

elseif(rbt=="16")fonti=16;

elsefonti=24;

font=newFont("宋體",Font.BOLD,fonti);

lb.setFont(font);

lb.setForeground(newColor(i1,i2,i3));

}

}JComboBox組件

JComboBox組件被稱為下拉列表框用戶可在這個(gè)列表中進(jìn)行選擇,或者直接輸入所要的選項(xiàng)。下拉列表與選項(xiàng)按鈕類似,一次只能選擇一項(xiàng)。構(gòu)造方法

JComboBox(Vectoritems)JComboBox()JComboBox(ComboBoxModelaModel)JComboBox(Object[]items)成員方法

voidaddActionListener(ActionListenere)voidaddItemListener(ItemListeneraListener)addItem(ObjectanObject)StringgetActionCommand()ObjectgetItemAt(intindex)intgetItemCount()intgetSelectedIndex()事件響應(yīng)

選中列表中的選項(xiàng)產(chǎn)生ItemListener事件實(shí)現(xiàn)接口ItemListener處理方法

publicvoiditemStateChanged(ItemEvente)

在JComboBox組件中添加4個(gè)學(xué)生的名字選項(xiàng),當(dāng)點(diǎn)擊下拉列表選擇項(xiàng)時(shí)得到學(xué)生的名字,將他的成績用標(biāo)簽文本顯示。importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;publicclassc10_3extendsJAppletimplementsItemListener

{

Containerctp=getContentPane();

JLabellb1=newJLabel("姓名:"),

lb2=newJLabel("英語:"),

lb3=newJLabel("");

Stringname[]={"李林","趙欣","張揚(yáng)","童梅"},

score[]={"80","94","75","87"};

JComboBoxcbx=newJComboBox();

publicvoidinit()

{

ctp.setLayout(newFlowLayout());

for(intj=0;j<name.length;j++)

cbx.addItem(name[j]);

ctp.add(lb1);

ctp.add(cbx);

cbx.addItemListener(this);

ctp.add(lb2);

ctp.add(lb3);

}publicvoiditemStateChanged(ItemEvente)

{

intc=0;

Stringstr=(String)e.getItem();

for(inti=0;i<name.length;i++)

if(str==name[i])

c=cbx.getSelectedIndex();

lb3.setText(score[c]);

}

}

JList組件

JList稱為列表組件

JList組件與JComboBox組件的最大區(qū)別是:JComboBox組件一次只能選擇一項(xiàng),而JList組件一次可以選擇一項(xiàng)或多項(xiàng),選擇多項(xiàng)時(shí)可以是連續(xù)區(qū)間選擇(按住Shift鍵進(jìn)行選擇),也可以是不連續(xù)的選擇(按住Ctrl鍵進(jìn)行選擇)。

構(gòu)造方法

JList(VectorlistData)JList()JList(ListModeldataModel)JList(Object[]listData)成員方法

voidaddListSelectionListener

(ListSelectionListenere)IntgetSelectedIndex()Int[]getSelectedIndices()voidsetSelectionBackground(Colorc)voidsetSelectionForeground(Colorc)intgetVisibleRow()CountvoidsetVisibleRowCount(intnum)ListSelectionEvent事件

1.當(dāng)用戶單擊列表框中的某一個(gè)選項(xiàng)并選中它時(shí),將產(chǎn)生ListSelectionEvent類的選擇事件,此事件是Swing的事件;

2.當(dāng)用戶雙擊列表框中的某個(gè)選項(xiàng)時(shí),將產(chǎn)生MouseEvent類的動(dòng)作事件。事件響應(yīng)接口ListSelectionListener實(shí)現(xiàn)方法valueChanged(ListSelectionEvente)

設(shè)置一個(gè)JLabel組件和JList組件,點(diǎn)擊列表框中的選項(xiàng),將所選項(xiàng)的值作為JLabel組件的文本輸出。

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

importjavax.swing.event.*;publicclassc10_4extendsJAppletimplementsListSelectionListener

{

JListlis=null;

JLabellb=null;

String[]s={"小學(xué)","初中","高中","大學(xué)","研究生"};

publicvoidinit()

{Containercp=getContentPane();

cp.setLayout(newBorderLayout());

lb=newJLabel();

lis=newJList(s);

lis.setVisibleRowCount(3);

lis.setBorder(BorderFactory.createTitledBorder("請選擇"));

lis.addListSelectionListener(this);

cp.add(lb,BorderLayout.NORTH);

cp.add(newJScrollPane(lis),BorderLayout.CENTER);

}

publicvoidvalueChanged(ListSelectionEvente)

{

intm=0;

Stringstr="選取的是:";

int[]index=lis.getSelectedIndices();

for(inti=0;i<index.length;i++)

{

m=index[i];

str=str+s[m]+"";

}

lb.setText(str);

}

}

JTextField與JTextArea組件

JtextField被稱為文本框。它定義了一個(gè)單行條形文本區(qū),可以輸出任何基于文本的信息,也可以接受用戶的輸入。

JtextField構(gòu)造方法

JTextField()JTextField(intn)JTextField(Strings)JTextField(Strings,intn)成員方法

intgetColumns()voidsetColumns(intColumns)voidaddActionListener(ActionListenere)voidsetFont(Fontf)voidsetHorizontalAlignment(intalig)voidsetActionCommand(Stringcom)JTextArea構(gòu)造方法JTextArea()JTextArea(intn,intm)JTextArea(Strings)JTextArea(Strings,intn,intm)JTextArea(Strings,intn,intm,intk)JTextArea(Documentdoc)JTextArea(Documentdoc,Strings,intn)成員方法

voidsetFont(Fontf)voidinsert(Stringstr,intpos)voidappend(Stringstr)voidreplaceRange(Stringstr,intstart,intend)publicintgetRows()publicvoidsetRows(introws)publicintgetColumns()publicvoidsetColumns(intColumns)事件處理

JTextField類只引發(fā)ActionEvent事件

JTextArea的事件響應(yīng)由JTextCompo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論