歷史學(xué)swing用戶界面組件_第1頁
歷史學(xué)swing用戶界面組件_第2頁
歷史學(xué)swing用戶界面組件_第3頁
歷史學(xué)swing用戶界面組件_第4頁
歷史學(xué)swing用戶界面組件_第5頁
已閱讀5頁,還剩61頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

歷史學(xué)swing用戶界面組件1目標(biāo)了解Swing的結(jié)構(gòu)了解Swing

GUI的容器掌握Jframe和Jpanel的使用掌握用戶界面組件的使用方法

掌握常用Swing布局管理器的使用第1頁/共66頁2Swing

結(jié)構(gòu)ObjectComponentJFrameContainerWindowFrameDialogJDialogJTextJComboBoxJLabelJListJMenuBarJOptionPaneJPanelJScrollBarAbstractButtonJToggleButtonJMenuItemJButtonJCheckBox

JRadioButtonJComponentJMenu第2頁/共66頁3文本組件JTextComponentJtextComponent是所有Swing文本組件的根類JTextFieldJTextAreaJEditorPaneJTextPaneJPasswordField類的常用方法:void

setText(String

t)String

getText()void

setEditable(boolean

b)4//改變一個文本組件中的文本//返回一個文本組件中的文本//決定用戶能否編輯文本組件的內(nèi)容第3頁/共66頁文本框JTextField(1)JTextField組件允許輸入或編輯單行文本此類的構(gòu)造函數(shù)包括:JTextField()JTextField(Document

doc,

String

text,

int

columns)JTextField(int

columns)//建立一個指定列寬度的空白文本框JTextField(String

text)

//建立一個帶有初始文本的文本框JTextField(String

text,

int

columns)把文本框添加到窗口的通常辦法是把它先添加到面板或者其它容器中。示例:……Container

con=getContentPane();con.setLayout(new

FlowLayout());JLabel

jl=new

JLabel(“文本域”);con.add(jl);JTextField

tf

=

new

JTextField(20);con.add(tf);……第4頁/共66頁5文本框JTextField(2)■■6■■在實踐中,應(yīng)該把文本框的最大列寬多設(shè)1到2個字符。輸入文本的長度可以超過最大列寬,這時文本框就會卷動。如果你需要在運行時重新設(shè)置列寬,應(yīng)聯(lián)合使用setColumns方法和包含該文本框的容器的validate方法。textFiled.

setColumns(10);panel.validate();//布局管理器重新繪制容器可以在任何時候改變文本框的內(nèi)容:textFiled.setText(“hello!”);獲取文本框中的內(nèi)容并去掉前后空格:textFiled.getText().trim();int

add1

=

Integer.parseInt(textFiled.

getText().

trim());第5頁/共66頁文本框JTextField(3)■所有文本組件的模型都由Document接口說明,這既包括無格式的文本,也包括格式化的文本(如html)。當(dāng)數(shù)據(jù)改變后,可以要求文檔(而非文本組件)通知你,這需要安裝一個文檔監(jiān)聽器:■■■■■//新建文檔監(jiān)聽器DocumentListener

resultListener

=

new

ResultListener();...//為第一個文本域安裝一個文檔監(jiān)聽器originText.getDocument().addDocumentListener(resultListe

ner);//當(dāng)文本發(fā)生改變后,下面三個方法之一會被調(diào)用:void

insertUpdate(DocumentEvent

e)void

removeUpdate(DocumentEvent

e)voidchangedUpdate(DocumentEvente)//改變格式時你的文檔監(jiān)聽器必須實現(xiàn)這三個方法如果你使用一個動作監(jiān)聽器的話,只有當(dāng)用戶按下ENTER鍵時,該動作監(jiān)聽器才會得到通知。7第6頁/共66頁文本框使用示例

獲取兩個文本框的輸入并求和,然后顯示在第三個文本框中。程序代碼見。運行結(jié)果如下:初始狀態(tài)改變輸入8第7頁/共66頁密碼框JPasswordField

特殊的文本框。在密碼框中輸入時,用戶的輸入并不會真正顯示出來,而是顯示回顯字符,如“*”,以防止被他人看見用戶輸入的密碼。構(gòu)造函數(shù):JPasswordField(Stringtext,

int

columns)參數(shù):text 顯示的文本,如果沒有則為nullcolumns列大小其它方法void

setEchoChar(char

echo)設(shè)置密碼框的回顯字符。0表示設(shè)置為默認回顯字符char[]getPassword()

返回包含在密碼框中的文本。9第8頁/共66頁密碼框使用示例將密碼框的輸入顯示在文本框中程序代碼見。運行結(jié)果如下:第9頁/共66頁10文本區(qū)JTextArea

3-1在一個文本區(qū)里,用戶可以輸入多行文本它可實現(xiàn)可滾動界面JTextArea組件可使用下列構(gòu)造函數(shù)創(chuàng)建:JTextArea()JTextArea(int

rows,int

cols)//建立一個指定行列的文本區(qū)JTextArea(String

text)//建立一個帶初始化文本的文本區(qū)JTextArea(Stringtext,int

rows,

int

cols)JTextArea(Document

doc)JTextArea(Document

doc,

String

text,

int

rows,

int

cols)例:…JLabel

jl=new

JLabel(“文本區(qū)”);con.add(jl);JTextArea

ta

=

new

JTextArea(5,10);con.add(ta);…第10頁/共66頁11文本區(qū)JTextArea

3-2多行文本之間的換行可以采用兩種方式:手動換行。即輸入ENTER鍵,這將在文本中插入換行符“\n”。通過設(shè)置換行屬性來避免手動換行,由文本區(qū)組件自動處理。

textArea.setLineWrap(true);//對長的行換行設(shè)置為真但 是這樣的設(shè)置并沒有真正在文本中插入換行符“\n”。在Swing中,文本區(qū)沒有滾動條。要給文本區(qū)增加滾動條,可以通過把文本區(qū)插入到一個滾動窗格中。然后把該滾動窗格插入進內(nèi)容窗格中。textArea

=new

JTextArea(8,40);JScrollPane

scrollPane

=

new

JScrollPane(textArea);contentPane.

add(scrollPane,

BorderLayout.CENTER);在Swing中,給組件添加滾動條的通用處理方法是-----把組件添加進一個滾動窗格中。滾動由滾動窗格內(nèi)部處理,滾動條會自動出現(xiàn)或

消失第11頁/共66頁12文本區(qū)JTextArea

3-313類的常用方法:Void

setColumns(int

cols)

設(shè)置文本區(qū)的列數(shù)Void

setRows(int

rows

設(shè)置文本區(qū)的行數(shù)Void

append(String

newText)

把指定文本追加到文本區(qū)文本的末尾Void

setLineWrapVoid

setTabSize(int

c)打開或關(guān)閉換行設(shè)置TAB鍵的列數(shù)為c類的構(gòu)造函數(shù)JScrollPane(Componen第t12c頁)/共66頁創(chuàng)建一個顯示指定組件c的滾動窗格。當(dāng)組件內(nèi)容超過顯示范圍時,滾動條會自動出現(xiàn)文本區(qū)使用示例文本區(qū)的三種顯示方式程序代碼見。運行結(jié)果如下:第13頁/共66頁14標(biāo)簽JLabel

3-1

標(biāo)簽是容納文本的組件。這種組件沒有修飾(例如,沒有邊界),它們也不響應(yīng)用戶輸入。

標(biāo)簽常用來標(biāo)識組件,如文本組件。給組件設(shè)置標(biāo)簽的方法如下:使用正確的文本構(gòu)造一個JLable組件把該標(biāo)簽組件放置到同需要標(biāo)識的組件足夠的地方,這樣用戶能夠看到該標(biāo)簽標(biāo)識了哪個組件第14頁/共66頁

標(biāo)簽同任何其它組件一樣,可以定位在一個容器中。你可以把它放在你需要的地方15標(biāo)簽JLabel

3-2它既可以顯示文本也可以顯示圖像構(gòu)造函數(shù)如下:JLabel(Icon

icon)://使用左對齊圖標(biāo)來構(gòu)造一個標(biāo)簽JLabel(String

text)://使用左對齊字符串來構(gòu)造一個標(biāo)簽JLabel(Stringtext,intalign)://使用字符串及指定的對齊方式來構(gòu)造一個標(biāo)簽JLabel(Stringtext,Iconicon,int

align)://同時使用字符串和圖標(biāo)及指定的對齊方式來構(gòu)造一個標(biāo)簽參數(shù):text表示使用的字符串;icon表示使用的圖標(biāo);align表示水平對齊方式,其值可以為:SwingConstants.LEFT、SwingConstants.RIGHT、SwingConstants.CENTER、SwingConstants.NORTH、SwingConstants.EAST等說明:JLable實現(xiàn)了SwingConstants接口,該接口定義了很多有用的常量。SwingConstants.LEFT也可以寫成JLable.LEFT第15頁/共66頁16標(biāo)簽JLabel

3-3

SetText和SetIcon方法可以在運行時設(shè)定標(biāo)簽的文本和圖標(biāo)Void

setText(String

text)Void

setIcon(Icon

icon)例:JLable

lable=new

JLable(“text”,

SwingConstants.RIGHT

);或JLable

lable=new

JLable(“text”,

JLable.RIGHT

);17第16頁/共66頁按鈕JButton

2-1

JButton類允許用圖標(biāo)、字符串或兩者同時構(gòu)造一個按鈕。構(gòu)造函數(shù)如下:JButton(Icon

icon):icon表示使用的圖標(biāo)JButton(String

text):text表示使用的字符串JButton(String

text,

Icon

icon)例:loginButton=new

JButton("登錄",newImageIcon("login.gif"));18第17頁/共66頁按鈕JButton

2-2

當(dāng)希望按鈕對單擊動作有所反應(yīng)時,我們需要為按鈕注冊一個事件監(jiān)聽器,并且實現(xiàn)這個事件監(jiān)聽器,就可以完成所需要的按鈕功能。//注冊事件監(jiān)聽器

loginButton.addActionListener(newLoginAction());//實現(xiàn)事件監(jiān)聽器

private

class

LoginAction

implementsActionListener19第18頁/共66頁按鈕使用示例密碼驗證示例當(dāng)用戶輸入密碼后,按下“登錄”按鈕,然后我們將密碼輸入是否正確的結(jié)果顯示在文本域中。程序代碼見Login.java。運行結(jié)果如下:第19頁/共66頁20選擇性輸入組件

為了簡化表單填寫過程,通常為用戶提供多種可供選擇的選項,而無需用戶寫出他們的響應(yīng)。常用于選擇性輸入的組件有:復(fù)選框單選按鈕列表框組合框21第20頁/共66頁單選按鈕JRadioButton2-1單選按鈕組件是一組互斥按鈕,即我們一次只能選擇其中的一個選項,選項的選取只需要單擊即可。ButtonGroup用于創(chuàng)建按鈕組JRadioButton對象可使用下列構(gòu)造函數(shù)創(chuàng)建:JRadioButton()JRadioButton(Icon

icon)JRadioButton(Icon,

boolean

selected)JRadioButton(String

text)JRadioButton(Stringtext,boolean

selected)JRadioButton(String

text,

Icon

icon)JRadioButton(String

text,

Iconicon,

boolean

selected)22第21頁/共66頁單選按鈕JRadioButton2-2例:使用按鈕組ButtonGroup

group

=

new

ButtonGroup();JRadioButton

button1

=

new

JRadioButton(“EAST”,true);...JRadioButton

button4

=

new

JRadioButton(“NORTH”,false);為了指定單選按鈕的初始選項,我們在新建

JRadioButton對象時,將其構(gòu)造函數(shù)的第二個參數(shù)設(shè)置為“true”;同時,其他按鈕對象的第二個參數(shù)被設(shè)置為“false”。23第22頁/共66頁單選按鈕使用示例

通過選擇單選按鈕中的選項來設(shè)置標(biāo)簽組件的內(nèi)容,由標(biāo)簽組件顯示我們的選擇。程序代碼見。運行結(jié)果如下:第23頁/共66頁24復(fù)選框JCheckBox

2-1

復(fù)選框組件可以進行多重選擇,即我們能夠選擇其中的多個選項,如果要取消或選取某選項,可以單擊此選項。

和單選按鈕不同,復(fù)選框允許用戶選擇多個選項。我們通過單擊復(fù)選框來選取該選項,再單擊一下,則取消選取。建立復(fù)選框組件對象需要使用標(biāo)簽來表明該復(fù)選框的含義,標(biāo)簽在復(fù)選框構(gòu)造器里進行設(shè)置;對復(fù)選框是否被選取可以通過isSelected方法進行狀態(tài)判斷。例:boldCheck=new

JCheckBox(“Bold”);//新建復(fù)選框。italicCheck=new

JCheckBox(“Italic”);//新建復(fù)選框。boldCheck.isSelected();//判斷“mathCheck”復(fù)選框是否被選定25第24頁/共66頁復(fù)選框JCheckBox

2-2當(dāng)用戶點擊一個復(fù)選框時,就會觸發(fā)一個動作事件。你可以設(shè)置動作監(jiān)聽器。例如,兩個按鈕共享同一個動作監(jiān)聽器:ActionListener

listener=…;Bold.

addActionListener(listener);italic.

addActionListener(listener);監(jiān)聽器的actionperformed方法:public

void

actionperformed

(ActionEvent

event){int

mode=0;if

(bold.

isSelected())mode

+=Font.

BOLDif

(italic.

isSelected())mode

+=Font.

ITALIClabel.

setFont(new

Font(“Serif”,

mode,

FONTSIZE))}26第25頁/共66頁復(fù)選框使用示例

選擇字體風(fēng)格。程序代碼見。運行結(jié)果如下:第26頁/共66頁27列表框組件JList

3-1列表框組件允許用戶從一個列表中選擇一個或多個條目。

選擇列表框中的多個條目有兩種方式:續(xù)條目選擇和間斷條目選擇。JList類既可顯示字符串,也可顯示圖標(biāo)JList不支持雙擊,MouseListener可用于解決雙擊問題構(gòu)造函數(shù):public

JList():使用空模型構(gòu)造JList

public

JList(ListModel

dataModel):構(gòu)造一個列表,用它顯示指定模型中的元素。

public

JList(Object[]listData):構(gòu)造一個列表以顯示指定數(shù)組listData的元素。28第27頁/共66頁列表框組件JList

3-2建立列表框前,需要指定所顯示的列表條目:

String[]

courses

=

{“Math”,

“English”,

“Physics”,“Chemic”,

“Biology”,

“Politics”};JList

courseList

=

new

JList(courses);

JList本身不支持滾動。如果列表框比較長,而顯示屏幕比較小,可以設(shè)置列表中顯示的行數(shù),同時使用滾動條:courseList.setVisibleRowCount(4);JScrollPane

listScrollPane

=

new

JScrollPane(courseList);29第28頁/共66頁列表框組件JList

3-3用戶選擇列表框條目時,列表框就會產(chǎn)生選擇事件。將列表選擇監(jiān)聽器ListSelectionListener添加給列表組件,并在該監(jiān)聽器中實現(xiàn)

valueChanged方法:courseList.addListSelectionListener(newcourseListener());...private

class

courseListenerimplements

ListSelectionListener{public

void

valueChanged(ListSelectionEvent

event){...}}獲得用戶所選擇的列表框條目以及條目所在的索引號需要使用

getSelectedValues方法和getSelectedIndices方法:Object[]

selectedCourses

=

courseList.

getSelectedValues();int[]

selectedIndexCourses=courseList.

getSelectedIndices();30第29頁/共66頁列表框組件使用示例

在給定的科目中選擇多門課程。程序代碼見。運行結(jié)果如下:第30頁/共66頁31組合框JComboBox

3-1■32■組合框?qū)⑽谋究蚝拖吕斜砜蚪Y(jié)合起來,使得用戶可以在一組預(yù)定義的選項中選擇一個條目,而且能夠修改選項內(nèi)容。構(gòu)造函數(shù)如下:public

JComboBox():此構(gòu)造函數(shù)使用缺省數(shù)據(jù)模型創(chuàng)建JComboBoxpublic

JComboBox(ComboBoxModel

asModel):使用現(xiàn)有

ComboBoxModel中的項目創(chuàng)建組合框public

JComboBox(Object[]items):用指定數(shù)組元素創(chuàng)建組合框新建一個有內(nèi)容的組合框既可以象列表框那樣指定數(shù)組,也可以采用向組合框?qū)ο罄锛尤霔l目的方法。對組合框是否能夠被編輯也可以進行設(shè)置。//新建組合框。jobsBox

=

new

JComboBox();jobsBox.setEditable(true);//設(shè)置組合框是否能夠被編輯。jobsBox.addItem("job1");jobsBox.

addItem("job2");第31頁/共66頁組合框JComboBox

3-2組合框的內(nèi)容是可以動態(tài)變化的:addItem(Object

item)方法能夠把條目添加到列表的末尾;insertItermAt(Object

item,int

index)方法將把新條目添加到列表的任何位置;removeItem(Object

item)方法和removeItemAt(intindex)方法將能夠刪除指定條目;removeAllItems()方法將刪除所有條目:getSelectedItem()方法返回當(dāng)前被選擇的條目jobsBox.insertItermAt(“job7”,6);//在第7個位置增加“job7”條目。jobsBox.removeItem(“job7”);//刪除“job7”條目。jobsBox.removeItemAt(5);

//刪除第6個條目,即“job6”。jobsBox.removeAllItems();

//刪除所有條目。33第32頁/共66頁組合框JComboBox

3-3

當(dāng)選擇一個條目時,組合框就產(chǎn)生一個事件,對事件的監(jiān)聽需要添加事件監(jiān)聽器,并實現(xiàn)

actionPerformed方法://增加事件監(jiān)聽器。jobsBox.

addActionListener(new

jobsListener());...private

class

jobsListener

implements

ActionListener{■■public

void

actionPerformed(ActionEvent

event){

...

}}

當(dāng)組合框的選擇事件發(fā)生時,可以通過

getSelectedItem方法來獲取當(dāng)前被選擇的條目:Object

selectedJob

=

jobsBox.getSelectedItem();第33頁/共66頁34組合框使用示例

應(yīng)用組合框來進行選擇職業(yè)。程序代碼見ComboBoxExample.java。運行結(jié)果如下:第34頁/共66頁35滑塊JSlider

3-1滑塊組件一般有一個連續(xù)區(qū)間和可拖動的滑塊,用戶可以通過拖動滑塊在一個區(qū)間范圍里進行選擇。構(gòu)造函數(shù)如下:JSlider()JSlider(intdirection)JSlider(int

min,

int

max)JSlider(int

min,

int

max,

int

initialValue)JSlider(int

min,

int

max,

int

initialValue)JSlider(int

direction,int

min,int

max,int

initialValue)//使用給定方向、最小值、最大值和初始值來構(gòu)造一個水平滑塊參數(shù):direction

下面幾個常量之一:或者,默認為前者

Min,max

滑塊的最小值和最大值,默認分別為0和100

initialValue

滑塊的初始值,默認為50JSlider

ageSlider

=

new

JSlider();

ageSlider

=

new

JSlider(SwingConstants.VERTICAL,0,120,20);36第35頁/共66頁滑塊JSlider

3-2可以為滑塊增加標(biāo)尺:

setMajorTickSpacing(intunits)//為滑塊設(shè)置一個大標(biāo)尺

setMinorTickSpacing(intunits)//為滑塊設(shè)置一個小標(biāo)尺

大標(biāo)尺和小標(biāo)尺是獨立的。Units指滑塊值而非像素值顯示標(biāo)尺:setPaintTicks(boolean

b)//b為true時顯示強制滑塊對齊標(biāo)尺:setSnapToTicks(boolean

b)b為true時強制對齊37第36頁/共66頁滑塊JSlider

3-3當(dāng)滑塊被拖動時,滑塊的值將發(fā)生變化,觸發(fā)ChangeEvent事件?;瑝K組件的事件監(jiān)聽器要實現(xiàn)ChangeListener接口,并實現(xiàn)此接口中的stateChanged方法:AgeListener

myAgeListener

=

new

AgeListener();ageSlider.

addChangeListener(myAgeListener);private

class

AgeListener

implements

ChangeListener{public

void

stateChanged(ChangeEvent

event){

...

}}滑塊值發(fā)生變化時,使用getValue方法來獲得滑塊值:

myTextField.setText(""+sourceSlider.getValue());38第37頁/共66頁滑塊使用示例

在進行年齡輸入時,使用滑塊進行直觀的選擇。程序代碼見。運行結(jié)果如下:第38頁/共66頁39邊界Border當(dāng)界面中的組件比較多時,需要從視覺上將組件分隔。通用的辦法是為面板設(shè)置邊界,并將需要分隔的組件添加到該面板中??蛇x的邊界風(fēng)格包括:低斜面、凸斜面、蝕刻、直線、不光滑、空

(只是在組件周圍創(chuàng)建一些空白地方)。創(chuàng)建邊界需要調(diào)用BorderFactory類的靜態(tài)方法。當(dāng)需要給邊界增加標(biāo)題以提示時,可以使用BorderFactory的createTitledBorder方法://初始化帶標(biāo)題的空邊界。Border

border

=

BorderFactory.createEmptyBorder();(border,

"Border

types");當(dāng)創(chuàng)建好需要的邊界后,就可以把邊界對象添加到組件中:

buttonPanel.setBorder(titled);40第39頁/共66頁邊界使用示例各種邊界的不同效果。程序代碼見。運行結(jié)果如下:第40頁/共66頁41菜單

菜單顯示項目列表,指明各種任務(wù)。

選擇或單擊某個選項時會打開另一個列表或子菜單。

Swing菜單由菜單欄、菜單和菜單項構(gòu)成。

菜單欄(位于窗口頂部)是所有菜單和菜單項的根第41頁/共66頁42典型的菜單第42頁/共66頁43Swing菜單組件JMenuBarJSeperatorJMenuJComponentJPopupMenu

AbstractButtonJMenuItemObjectComponentContainerJCheckBoxMenuItem

JRadioButtonMenuItem第43頁/共66頁44菜單欄JMenuBar

JMenuBar是可通過JFrame、JWindow或JInternalFrame的根窗格添加到容器中的組件。由多個菜單JMenu組成,每個JMenu在JMenubar中都表示為字符串。JMenuBar需要兩個附加類:SingleSelectionModel類:跟蹤當(dāng)前選定的菜單LookAndFeel類:負責(zé)繪制菜單欄以及對在其中發(fā)生的事件作出響應(yīng)

構(gòu)造函數(shù)只有一個:

JMenuBar()add(JMenu

c)//將菜單添加到菜單欄中45第44頁/共66頁菜單JMenu

2-1

JMenu在JMenuBar下以文本字符串形式顯示,而在用戶單擊它時,則以彈出式菜單顯示。JMenu具有兩個附加類:JPopupMenu:用于顯示JMenu的菜單項LookAndFeel:負責(zé)繪制菜單欄中的菜單以及對在其中發(fā)生的所有事件作出響應(yīng)構(gòu)造函數(shù):JMenu()JMenu(Action

a)JMenu(String

s)//以給定的字符串構(gòu)造一個菜單對象JMenu(String

s,

boolean

b)46第45頁/共66頁菜單JMenu

2-2JMenu類的常用方法:add(JMenuItem

item)//添加一個菜單項(或菜單)add(String

label)//添加一個菜單項到菜單中add(Action

a)//添加一個菜單項并且為其關(guān)聯(lián)一個動作addSeparator()//添加一個分割符到菜單中inset(JMenuItemmenu,int

index)//把一個菜單項(或子菜單)添加到菜單的指定位置處insertSeparator(intindex)//添加一個分割符到菜單中的指定位置上remove(int

index)//從菜單中刪除指定的菜單項remove(JMenuItem

item)//從菜單中刪除指定的菜單項47第46頁/共66頁彈出式菜單JPopupMenu

2-1是一種不固定在菜單欄中、可以隨處浮動的菜單構(gòu)造函數(shù)JPopupMenu()JPopupMenu(String

label)//指定標(biāo)題創(chuàng)建必須明確調(diào)用show方法來顯示彈出式菜單show(Component

invoker,

int

x,

int

y)參數(shù):

invoker

彈出式菜單在其內(nèi)顯示的組件

x,

y

左上角的坐標(biāo)(使用invoker

的坐標(biāo))popup.

show(panel,

x,

y);48第47頁/共66頁彈出式菜單JPopupMenu2-249

通常當(dāng)用戶點擊某個鼠標(biāo)鍵時,彈出菜單就會出現(xiàn),這就是所謂的彈出觸發(fā)器。在WINDOWS中,彈出觸發(fā)器通常是鼠標(biāo)右鍵。建立彈出觸發(fā)器的步驟:

1.安裝一個鼠標(biāo)監(jiān)聽器2.在鼠標(biāo)監(jiān)聽器中添加如下代碼:Public

void

mousePressed(MouseEvent

event){If

(event.

isPopupTrigger())popup.

show(event.

getComponet(),

event.getx(),

event.

gety());}當(dāng)用戶點擊鼠標(biāo)右第鍵48時頁/,共6會6頁在鼠標(biāo)位置處顯示彈出菜單菜單項JMenuItem菜單項JMenuItem是JMenu或JPopupMenu中的一個組件,以文本字符串形式顯示,可以具有圖標(biāo)。它同按鈕非常相似JMenuItem的外觀可以修改,如字體、顏色、背景、邊框等構(gòu)造函數(shù):JMenuItem()JMenuItem(Action

a)JMenuItem(Icon

icon)JMenuItem(String

text)JMenuItem(String

text,

Icon

icon)JMenuItem(String

text,

int

mnemonic)例:JMenuItem

cutItem=new

JMenuItem(“Cut”,new

ImageIcon(“cut.gif”))50第49頁/共66頁復(fù)選框菜單項JCheckBoxMenuItem

2-1這種菜單項在文本旁邊顯示一個復(fù)選框。當(dāng)用戶選擇該菜單項時,該菜單項會自動在選擇和未選擇之間切換構(gòu)造函數(shù):JCheckBoxMenuItem()JCheckBoxMenuItem(Icon

icon)JCheckBoxMenuItem(String

text)JCheckBoxMenuItem(String

text,

boolean

b)JCheckBoxMenuItem(String

text,

Icon

icon)JCheckBoxMenuItem(String

text,

Icon

icon,

boolean

b)JCheckBoxMenuItem(Action

a)例:JCheckBoxMenuItemmyitem=new

JCheckBoxMenuItem(“read-only”);menu.

add(myitem);第50頁/共66頁51復(fù)選框菜單項JCheckBoxMenuItem

2-2

使用這種菜單項,你應(yīng)該使用isSelected方法來測試菜單項的當(dāng)前狀態(tài)(這意味著你應(yīng)該保留一個實例變量保存該菜單項的引用),設(shè)置狀態(tài)的方法是setSelectedboolean

isSelected()//返回該條項的選擇狀態(tài)(true為被選定)

void

setSelected(boolean

state)//設(shè)置該條項的選擇狀態(tài)52第51頁/共66頁單選按鈕菜單項

JRadioButtonMenuItem2-1這種菜單項在文本旁邊顯示一個單選按鈕構(gòu)造函數(shù):JRadioButtonMenuItem()JRadioButtonMenuItem(Icon

icon)JRadioButtonMenuItem(String

text)JRadioButtonMenuItem(String

text,

boolean

b)JRadioButtonMenuItem(String

text,

Icon

icon)JRadioButtonMenuItem(String

text,

Icon

icon,

boolean

b)你必須把它們添加到一個按鈕組中。當(dāng)組中的一個按鈕被選擇以后,所有的其它按鈕都自動成為未選擇項例:ButtonGroup

group=new

ButtonGroup();JRadioButtonMenuItem

insitem=new

JRadioButtonMenuItem(“Insert”)

;Insitem.

setSelected(true);JRadioButtonMenuItem

ovrtype=new

JRadioButtonMenuItem(“Overtype”)

;group.

add(insitem);group.

add(ovrtype);menu.

add(insitem);menu.

add(ovrtype);第52頁/共66頁53單選按鈕菜單項JRadioButtonMenuItem

2-2

使用這種菜單項,你應(yīng)該使用isSelected方法來測試菜單項的當(dāng)前狀態(tài)(這意味著你應(yīng)該保留一個實例變量保存該菜單項的引用),設(shè)置狀態(tài)的方法是setSelectedboolean

isSelected()//返回該條項的選擇狀態(tài)(true為被選定)void

setSelected(boolean

state)//設(shè)置該條項的選擇狀態(tài)54第53頁/共66頁創(chuàng)建菜單

2-1

四個步驟:創(chuàng)建菜單欄、創(chuàng)建菜單以及子菜單、創(chuàng)建菜單項,并將菜單項加入到子菜單或菜單中,將子菜單加入到菜單中,將菜單加入到菜單欄中。//(a)創(chuàng)建菜單欄,并將菜單欄加入到框架中。JMenuBar

menuBar

=

new

JMenuBar();Frame.

setJMenuBar(menuBar);//(b)創(chuàng)建“File”菜單、“Edit”菜單和“View”菜單。JMenu

fileMenu=new

JMenu("File");JMenu

editMenu

=

new

JMenu("Edit");JMenu

viewMenu

=

new

JMenu("View");//(b)創(chuàng)建子菜單。JMenu

optionMenu

=

new

JMenu("Option");55第54頁/共66頁創(chuàng)建菜單

2-2//(c)通過Action對象新建“New”菜單項,并添加事件監(jiān)聽器。newItem=fileMenu.add(new

ShowAction("New"));//(c)通過指定菜單項對象新建“Paste”菜單項。pasteItem=new

JMenuItem("Paste","P");//(d)將菜單項加入到子菜單或菜單中,將子菜單加入到菜單中,將菜單加入到菜單欄中。fileMenu.add(newItem);editMenu.

add(pasteItem);viewMenu.

add(optionMenu);menuBar.

add(fileMenu);menuBar.

add(editMenu);menuBar.

add(viewMenu);56第55頁/共66頁創(chuàng)建復(fù)選框和單選按鈕菜單項和創(chuàng)建一般的菜單項幾乎一樣,只需要注意一下復(fù)選框和單選按鈕的不同構(gòu)造函數(shù)以及單選按鈕組的構(gòu)建://創(chuàng)建單選按鈕菜單項“Forward”,并將“Forward”菜單項加入到“Search”菜單中。ButtonGroup

group

=

new

ButtonGroup();forwardItem

=

new

JRadioButtonMenuItem("Forward");group.

add(forwardItem);searchMenu.

add(forwardItem);//創(chuàng)建復(fù)選框菜單項“ToolBar”,并加入到子菜單中。JCheckBoxMenuItem

toolItem=newJCheckBoxMenuItem("ToolBar");optionMenu.add(toolItem);57第56頁/共66頁快捷鍵和加速器快捷鍵顯示為帶有下劃線的字母,加速器則顯示為菜單項旁邊的組合鍵??旖萱I用來從當(dāng)前打開的菜單中選擇一個子菜單或菜單項,而加速器是在不打開菜單的情況下選擇菜單項的快捷鍵。例://設(shè)置菜單的快捷鍵。fileMenu.setMnemonic("F");//設(shè)置“Exit”菜單項的快捷鍵為“T”。

JMenuItem

exitItem=new

JMenuItem("Exit","T");//設(shè)置“Exit”菜單項的加速器為“Ctrl+T”。exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.

VK_T,

InputEvent.

CTRL_MASK));加速器只能關(guān)聯(lián)到菜單項,而不是菜單。加速器鍵實際上只是直接激活同菜單項關(guān)聯(lián)的事件而已。58第57頁/共66頁啟用和禁用菜單項一個菜單項能否被選取取決于菜單項的啟用或禁用狀態(tài)啟用或禁用菜單項需要使用setEnabled方法:saveItem.

溫馨提示

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

評論

0/150

提交評論