版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
zhanglei@
概述用戶界面組件介紹布局管理事件處理菜單和表格主要內(nèi)容本章基本要求了解AWT和Swing熟悉4個頂層容器掌握J(rèn)Frame熟悉常用的中間容器會對組件進行布局熟悉常用基本組件的創(chuàng)建和操作會設(shè)置組件的顏色和字體會處理組件上發(fā)生的事件會創(chuàng)建菜單和表格用戶界面的類型字符用戶界面(CUI):例如,MS-DOS圖形用戶界面(GUI):例如,MicrosoftWindowsGUI的組件基本的控制組件,例如:Button、Label等。容器:能容納和排列組件的組件組件用戶界面概述組件繼承它的父容器的性質(zhì)MenuListBoxCheckBoxRadioButtonButtonLabelFrameWindowTextBoxComboBoxAWTAWT(AbstractWindowToolkit)是在Swing出現(xiàn)之前用來設(shè)計界面的工具包用awt包中的類創(chuàng)建的用戶界面在不同的操作平臺上有不同的表現(xiàn)。使用不靈活importjava.awt.*;SwingSwing是對AWT的擴展,它是Java2中的一個標(biāo)準(zhǔn)包組件都以J開頭,例如:JFrame、JButton等。swing界面在不同的平臺上外觀完全一樣,真正做到平臺獨立importjavax.swing.*;基本概述界面設(shè)計中常用組件類的體系結(jié)構(gòu)java.lang.Objectjava.awt.Componentjava.awt.Containerjava.awt.Paneljava.awt.Windowjava.applet.AppletJAppletjavax.swing.JComponentjava.awt.Dialogjava.awt.FrameJDialogJFrameJWindowSwing組件用戶界面一個頂層容器(即主窗口)頂層容器包含若干個中間容器每個中間容器包含若干個基本組件按照合理的布局方式將它們組織在一起基本組件可響應(yīng)發(fā)生在其上的事件Java程序界面的構(gòu)成容器容器是用來容納和管理一組界面元素的對象?;窘M件必須被安排在某個容器中,否則就無法使用。JFrameContainerJWindowJPanelJDialogJApplet有邊框容器無邊框容器頂層容器頂層容器JFrame,JApplet,JDialog,JWindow作用:創(chuàng)建初始界面,為其他組件提供一個容器,以構(gòu)建滿足用戶需求的操作界面JFrame用來創(chuàng)建application,最常用的JApplet用來創(chuàng)建appletJDialog用來創(chuàng)建對話框,常用JWindow不常用JPanel,JScrollPane,JSplitPane,JTabbedPane、JInternalFrame、Box這些容器提供將有關(guān)組件按照某種布局組合在一起,然后放入中間容器或頂層容器的功能JPanel提供一個面板JScrollPane是具有滾動條的窗格JSplitPane是具有拆分功能的窗格JTabbedPane是帶有若干標(biāo)簽的分類窗格JInternalFrame用于創(chuàng)建內(nèi)嵌于JFrame中的內(nèi)部框架Box提供創(chuàng)建橫向/縱向盒子容器的功能中間容器JLabelJButton、JCheckBox、JRadioButtonJList、JComboBoxJTextField、JPasswordField、JTextAreaJToolBar、JToolTip、JProgressBarJSlider、JSpinnerJFileChooser、JColorChooserJMenuBar、JMenu、JMenuItem、JCheckBoxMenuItem、JRadioButtonMenuItem、JPopupMenuJTableJTreeJOptionPane、JSeparator基本組件類JFrame
是java.awt.Frame的子類在Swing的組件中,JFrame
并不全是由Java編寫的是一種與平臺關(guān)系比較密切的組件(Heavyweightcomponent)java.lang.Object|+--java.awt.Component|+--java.awt.Container|+--java.awt.Window|+--java.awt.Frame|+--javax.swing.JFrame創(chuàng)建用戶主窗口--JFrame構(gòu)造方法JFrame()創(chuàng)建無標(biāo)題窗口。JFrame(Strings)創(chuàng)建標(biāo)題名字是字符串s的窗口。例如:JFramef=newJFrame(“Hello”);常用方法setTitle(Stringtitle)設(shè)置JFrame標(biāo)題文本get/setSize():獲取/設(shè)置JFrame的大小。add(Objecta):將組件添加到JFrame中。dispose()關(guān)閉JFrame并回收用于創(chuàng)建窗口的任何資源。setVisible(booleanb)設(shè)置JFrame的可見性。setLocation(x,y)設(shè)置JFrame在屏幕的位置創(chuàng)建用戶主窗口--JFrame常用方法voidsetExtendedState(int);
//設(shè)置擴展的狀態(tài),取值:
NORMAL
ICONIFIED
MAXIMIZED_HORIZ
MAXIMIZED_VERT
MAXIMIZED_BOTH//最大化voidsetDefaultCloseOperation(int);
//設(shè)置默認(rèn)的關(guān)閉時的操作,取值:
DO_NOTHING_ON_CLOSE
HIDE_ON_CLOSE
DISPOSE_ON_CLOSE
EXIT_ON_CLOSE//關(guān)閉創(chuàng)建用戶主窗口--JFrameimportjavax.swing.*;publicclassFirstJFrame{publicstaticvoidmain(String[]args){JFramef=newJFrame();f.setTitle("MyFirstJFrame");f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setSize(300,300);f.setVisible(true);}}示例:直接使用JFrame創(chuàng)建importjavax.swing.*;publicclassSecondJFrameextendsJFrame{publicSecondJFrame(){super(“MySecondJFrame”);setDefaultCloseOperation(EXIT_ON_CLOSE);setExtendedState(MAXIMIZED_BOTH);setVisible(true);}publicstaticvoidmain(String[]args){SecondJFramef=newSecondJFrame();}}示例:擴展JFrame創(chuàng)建相關(guān)類圖標(biāo)類:javax.swing.ImageIcon圖像類:java.awt.Image創(chuàng)建圖標(biāo)和圖像對象ImageIconii=newImageIcon(“x.gif”);Imageimage=ii.getImage();設(shè)置
setIconImage(image);設(shè)置JFrame的圖標(biāo)由JFrame創(chuàng)建初始的用戶界面由JPanel、JScrollPane、JTabbedPane、JSplitPane、JInternalFrame、Box等創(chuàng)建中間容器由基本組件類創(chuàng)建有關(guān)的組件將基本組件按照某種布局添加到中間容器中,根據(jù)需要可能會用到容器的嵌套將中間容器按照某種布局添加到頂層容器中,形成滿足用戶需求的操作界面界面的基本組織方式Containercon=getContentPane();JPanelpanel=newJPanel();JButtonbutt=newJButton("PressMe");panel.add(butt);con.add(panel);獲得JFrame的容器并添加組件學(xué)生基本信息錄入界面的設(shè)計設(shè)計一個用戶界面,用于輸入學(xué)生的下列信息:
姓名 JTextField 密碼 JPasswordField
性別 JRadioButton 黨否 JCheckBox
年齡 JSpinner 顏色JColorChooser
加分 JSlider 系別 JComboBox
選課 JList 確認(rèn) JButton
保存 JFileChooser 結(jié)果 JTextArea要求輸入完畢按“確認(rèn)”將該學(xué)生的信息記錄到“結(jié)果”中;按“保存”將結(jié)果保存到一個指定的文件中;基本信息與結(jié)果界面上下分布在一個JSplitPane中;屏幕下方顯示當(dāng)前時間示例:學(xué)生信息管理系統(tǒng)步驟一:由JFrame創(chuàng)建初始的用戶界面,獲得JFrame的容器,添加中間容器JPanel示例:學(xué)生信息管理系統(tǒng)JFramef=newJFrame();f.setTitle("學(xué)生信息管理系統(tǒng)");f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setExtendedState(MAXIMIZED_BOTH);//f.setSize(800,600);//f.setLocation(200,200);Containercon=f.getContentPane();JPanelpan=newJPanel();con.add(pan);f.setVisible(true);基本組件標(biāo)簽標(biāo)簽(JLabel)是最簡單的組件,用于顯示單行靜態(tài)文本。用戶只能查看其內(nèi)容而不能對其進行修改。標(biāo)簽類沒有事件響應(yīng)。構(gòu)造方法JLabellabel1=newJLabel(“姓名”);ImageIconii=newImageIcon(“java.gif”);
JLabellabel2=newJLabel(ii);JLabellabel3=newJLabel(“姓名”,ii,JLabel.CENTER);標(biāo)簽內(nèi)容一般不需要改變,但也可以使用setText和setIcon方法進行改變例如當(dāng)使用同一標(biāo)簽顯示不同的圖片時,就可使用setIcon方法實現(xiàn)基本組件—標(biāo)簽步驟二:添加標(biāo)簽(要錄入的基本信息的名稱)示例:學(xué)生信息管理系統(tǒng)JFramef=newJFrame();……Containercon=f.getContentPane();Jpanelpan=newJPanel();JLabell_xm=newJLabel("姓名");pan.add(l_xm);JLabell_xb=newJLabel("性別");pan.add(l_xb);……con.add(pan);f.setVisible(true);按鈕是常用的功能組件,表示按鈕的類為JButton。構(gòu)造方法JButtonbutton1=newJButton(“姓名”);ImageIconii=newImageIcon(“java.gif”);JButtonbutton2=newJButton(ii);JButtonbutton3=newJButton(“姓名”,ii);常用方法voidsetActionCommand(String);voidaddActionListener(ActionListener);基本組件—按鈕步驟二:添加按鈕(確認(rèn)和保存按鈕)示例:學(xué)生信息管理系統(tǒng)JFramef=newJFrame();……Containercon=f.getContentPane();JPanelpan=newJPanel();JLabell_xml_xm=newJLabel("姓名");pan.add(l_xm);……JButtonb_sub=newJButton("確認(rèn)");pan.add(b_sub);JButtonb_save=newJButton("保存");pan.add(b_save);con.add(pan);f.setVisible(true);構(gòu)造方法JTextFieldtf1=newJTextField(10);JTextFieldtf2=newTextField(“aa”);JTextFieldtf3=newJTextField(“aa”,8);ComponentTextComponentJTextFieldJTextArea單行的文本框多行的文本區(qū)基本組件—文本框(JTextField)其它方法
publicStringgetText()publicStringgetSelectedText()publicvoidsetText(Strings)publicvoidsetEchoChar(charc)publicvoidsetEditable(booleanb)步驟二:添加文本框(錄入姓名信息)示例:學(xué)生信息管理系統(tǒng)JFramef=newJFrame();……Containercon=f.getContentPane();JPanelpan=newJPanel();JLabell_xm=newJLabel("姓名");pan.add(l_xm);JTextFieldtf_name=newJTextField(20);pan.add(tf_name);……con.add(pan);f.setVisible(true);構(gòu)造方法
JTextAreata1=newJTextArea(5,5);JTextAreata2=newJTextArea(“ab”,8,7);ComponentTextComponentJTextFieldJTextArea單行的文本框多行的文本區(qū)基本組件—文本區(qū)(JTextArea)其它方法publicgetCaretPosition()publicvoidinsert(Stringstr,intpos)publicStringgetSelectedText()publicintgetSelectionStart()publicintgetSelectionEnd()publicvoidreplaceRange(Stringstr,intstart,intend)應(yīng)用中經(jīng)常將文本區(qū)對象放入一個滾動窗格中,以使用滾動條功能,方法如下:JTextAreata=newJTextArea(10,10);JScrollPanesp=newJScrollPane(ta);基本組件—文本區(qū)(JTextArea)步驟二:添加文本域(顯示錄入結(jié)果信息)示例:學(xué)生信息管理系統(tǒng)JFramef=newJFrame();……Containercon=f.getContentPane();Jpanelpan=newJPanel();……Jlabell_jg=newJLabel("錄入結(jié)果");JTextArearesult=newJTextArea(10,30);JScrollPanesp=newJScrollPane(result);pan.add(sp);pan.add(l_jg);……con.add(pan);f.setVisible(true);基本組件—單選按鈕(JRadioButton)構(gòu)造方法(與JButton類似)JRadioButtonrbutt1=newJRadioButton(“男”,true);ImageIconii=newImageIcon(“java.gif”);
JRadioButtonrbutt2=newJRadioButton(ii);JRadioButtonrbutt3=newJRadioButton(“女”,ii,false);常用方法voidaddActionListener(ActionListener);voidaddItemListener(ItemListener);booleanisSelected();voidsetSelected(boolean);使用單選按鈕時經(jīng)常用到ButtonGroup類,如下創(chuàng)建按鈕組對象
ButtonGroupbg=newButtonGroup();創(chuàng)建若干單選按鈕對象
JRadioButtonb1=newJRadioButton(“x”);
JRadioButtonb2=newJRadioButton(“y”);將各單選按鈕添加到按鈕組中
bg.add(b1);
bg.add(b2);將單選按鈕添加到其他容器中
容器對象.add(b1);
容器對象.add(b2);注:按鈕組維持只有一個單選按鈕處于選擇狀態(tài)基本組件—單選按鈕(JRadioButton)步驟二:添加單選按鈕(選擇性別)示例:學(xué)生信息管理系統(tǒng)JFramef=newJFrame();……Containercon=f.getContentPane();Jpanelpan=newJPanel();……JRadioButtonmale=newJRadioButton("男",true);JRadioButtonfemale=newJRadioButton("女");ButtonGroupgroup=newButtonGroup();group.add(male);group.add(female);pan.add(male);pan.add(female);……con.add(pan);f.setVisible(true);構(gòu)造方法JCheckbox()創(chuàng)建一個沒有標(biāo)簽的復(fù)選框。JCheckbox(Iconicon)創(chuàng)建一個有圖標(biāo)的復(fù)選框。JCheckbox(Iconicon,booleansele)創(chuàng)建一個有圖標(biāo)icon的復(fù)選框,初始狀態(tài)為selsJCheckbox(Strings)創(chuàng)建一個有標(biāo)簽的復(fù)選框。JCheckbox(Strings,booleanb)創(chuàng)建一個有標(biāo)簽的復(fù)選框,參數(shù)b設(shè)置初始狀態(tài)JCheckbox(Stringstr,Iconicon)創(chuàng)建一個有str文字及圖標(biāo)icon的復(fù)選框JCheckbox(Stringstr,Iconicon,booleansele)創(chuàng)建一個有str文字及圖標(biāo)icon的復(fù)選框,初始狀態(tài)為sels基本組件—復(fù)選框(JCheckbox)常用方法isSelected():返回復(fù)選按鈕的狀態(tài),返回類型是boolean。如果返回true,則表示該按鈕處于選中狀態(tài);否則處于未選中狀態(tài)。setSelected(Booleanstate):設(shè)置復(fù)選按鈕的狀態(tài)?;窘M件—復(fù)選框(JCheckbox)步驟二:添加復(fù)選框(選擇愛好,多項選擇)示例:學(xué)生信息管理系統(tǒng)JFramef=newJFrame();……Containercon=f.getContentPane();Jpanelpan=newJPanel();……Jlabell_ah=newJLabel("愛好");JCheckBox[]hobby={newJCheckBox("音樂"),newJCheckBox("足球"),newJCheckBox("繪畫")};pan.add(l_ah);pan.add(hobby[0]);pan.add(hobby[1]);pan.add(hobby[2]);……con.add(pan);f.setVisible(true);構(gòu)造方法Stringss[]={“red”,”green”,”blue”};
JListlist1=newJList(ss);JListlist2=newJList(Vector);其它常用方法
voidaddListSelectionListener(…);voidsetVisibleRowCount(int);voidsetSelectionMode(int);
//取值如下(在ListSelectionModel中定義)
SINGLE_SELECTION
SINGLE_INTERVAL_SELECTION
MULTIPLE_INTERVAL_SELECTION(默認(rèn))intgetSelectedIndex();int[]getSelectedIndices();ObjectgetSelectedValue();Object[]getSelectedValues();基本組件—列表框(JList)步驟二:添加列表框(選擇選修課程)示例:學(xué)生信息管理系統(tǒng)JFramef=newJFrame();……Containercon=f.getContentPane();Jpanelpan=newJPanel();……JLabell_xk=newJLabel("選課");String[]coursesNames={"數(shù)據(jù)結(jié)構(gòu)“,"操作系統(tǒng)“,"網(wǎng)絡(luò)原理","Java程序設(shè)計“,"分布式系統(tǒng)開發(fā)技術(shù)","計算機導(dǎo)論“,"密碼學(xué)","計算機組成原理“,"編譯原理","圖形學(xué)”};course=newJList(coursesNames);pan.add(l_xk);pan.add(course);……con.add(pan);f.setVisible(true);構(gòu)造方法Stringss[]={“red”,”green”,”blue”};
JComboBoxcb1=newJComboBox(ss);JComboBoxcb2=newJComboBox(Vector);常用方法addItem()添加一個項目到JComboBox.get/setSelectedIndex()獲取/設(shè)置JComboBox中選中項目的索引get/setSelectedItem()獲取/設(shè)置選中的對象。removeAllItems()從JComboBox刪除所有對象。removeItem()從JComboBox刪除特定對象。setEditable把一個組合框設(shè)置為可編輯的。注意編輯只會影響當(dāng)前項,它不會改變列表的內(nèi)容。基本組件—下拉列表(JComboBox)步驟二:添加下拉列表(選擇院系)示例:學(xué)生信息管理系統(tǒng)JFramef=newJFrame();……Containercon=f.getContentPane();Jpanelpan=newJPanel();……JLabell_yx=newJLabel("院系");pan.add(l_yx);String[]departmentNames={"計算機科學(xué)與技術(shù)系","電子信息與技術(shù)系","計算機工程系”};JComboBoxdepartment=newJComboBox(departmentNames);department.setEditable(false);pan.add(department);
……con.add(pan);f.setVisible(true);構(gòu)造方法(類似于JTextField)常用方法voidaddActionListener(ActionListener);char[]getPassword();voidsetEchoChar(char);chargetEchoChar();基本組件—密碼域(JPasswordField)步驟二:添加密碼(密碼輸入顯示“*”)示例:學(xué)生信息管理系統(tǒng)JFramef=newJFrame();……Containercon=f.getContentPane();Jpanelpan=newJPanel();……JLabell_ma=newJLabel("密碼");pan.add(l_ma);password=newJPasswordField(20);password.setEchoChar('*');pan.add(password);
……con.add(pan);f.setVisible(true);構(gòu)造方法JSliderslider=new
JSlider(JSlider.HORIZONTAL,0,100,10);常用方法voidaddChangeListener(ChangeListener);voidsetValue(int);intgetValue();voidsetMajorTickSpacing(int);voidsetMinorTickSpacing(int);voidsetPaintTicks(boolean);//falsevoidsetPaintLabels(boolean);//falsevoidsetPaintTrack(boolean);//truevoidsetSnapToTicks(boolean);//false基本組件—滑動條(JSlider)步驟二:添加加分選項(加分的選項采用滑動條實現(xiàn))示例:學(xué)生信息管理系統(tǒng)JFramef=newJFrame();……Containercon=f.getContentPane();Jpanelpan=newJPanel();……JLabell_jf=newJLabel("加分");pan.add(l_jf);addition=newJSlider(JSlider.HORIZONTAL,0,100,50);addition.setMajorTickSpacing(10);addition.setMinorTickSpacing(5);addition.setPaintTicks(true);addition.setPaintLabels(true);addition.setSnapToTicks(true);pan.add(addition);……con.add(pan);f.setVisible(true);構(gòu)造方法
JProgressBar(int,int,int);JProgressBarpb=newJProgressBar(JProgressBar. HORIZONTAL,0,100);常用方法voidaddChangeListener(ChangeListener);voidsetValue(int);//設(shè)置當(dāng)前值voidsetString(String);
//設(shè)置顯示的字符串voidsetStringPainted(boolean);
//設(shè)置是否顯示字符串,默認(rèn)為falsevoidsetBorderPainted(boolean);
//設(shè)置是否顯示邊框,默認(rèn)為true基本組件—進度條(JProgressBar)步驟二:添加進度條示例:學(xué)生信息管理系統(tǒng)JFramef=newJFrame();……Containercon=f.getContentPane();Jpanelpan=newJPanel();……JProgressBarprogbar=newJProgressBar(JProgressBar.HORIZONTAL,0,100);progbar.setStringPainted(true);……con.add(pan);f.setVisible(true);構(gòu)造方法JFileChooserfc1,fc2;//聲明兩個對象變量fc1=newJFileChooser();//使用系統(tǒng)默認(rèn)目錄fc2=newJFileChooser(“d:\\java”);顯示方法intshowOpenDialog(Component);intshowSaveDialog(Component);
//分別用于顯示標(biāo)準(zhǔn)的打開和保存對話框
//參數(shù)Component指定對話框依附的父組件
//返回值:APPROVE_OPTION 選擇了確認(rèn)
CANCEL_OPTION 選擇了取消
ERROR_OPTION 出現(xiàn)了錯誤基本組件—文件選擇器(JFileChooser)其他常用方法voidsetCurrentDirectory(File);voidsetMultiSelectionEnabled(boolean);FilegetSelectedFile();File[]getSelectedFiles();FilegetCurrentDirectory();StringgetName(File);
//取得文件/目錄名稱,不含路徑,可用File類的getAbsolutePath()方法獲取完整路徑voidsetFileSelectionMode(int);
//FILES_ONLY只能選擇文件(默認(rèn))
DIRECTORIES_ONLY只能選擇目錄
FILES_AND_DIRECTORIES文件和目錄都可選voidsetFileFilter(FileFilter);顯示方法使用JColorChooser提供的類方法showDialogstaticColorshowDialog(
Component,//父組件
String,//標(biāo)題
Color//初始顏色值
);
//返回值:新選擇的顏色值Color示例
Colorc=JColorChooser.showDialog
(this,”請選擇顏色”,Color.red); //得到顏色對象c后,即可在需要的地方使用基本組件—顏色選擇器(JColorChooser)Confirm對話框intshowConfirmDialog(Component,Object);
//顯示含有Yes、No、Cancel按鈕的確認(rèn)框
//參數(shù):父組件,顯示信息
//返回值:
YES_OPTION 是
NO_OPTION 否
CANCEL_OPTION 撤銷
OK_OPTION 確定
CLOSED_OPTION 關(guān)閉還有其他形式的類方法,請參閱幫助文檔基本組件—對話框(
JOptionPane)532021/6/28Input對話框StringshowInputDialog(Component,Object);
//參數(shù):父組件,顯示信息
//返回值:
·選擇確認(rèn)后返回輸入的字符串
·選擇取消或關(guān)閉后返回null還有其他形式的類方法,請參閱幫助文檔基本組件—對話框(
JOptionPane)542021/6/28Message對話框voidshowMessageDialog(Component,Object);
//參數(shù):父組件,顯示信息
//沒有返回值,只是用來顯示一些信息還有其他形式的類方法,請參閱幫助文檔基本組件—對話框(
JOptionPane)552021/6/28Option對話框intshowOptionDialog(
Component,//父組件
Object,//顯示信息
String,//標(biāo)題
int,//標(biāo)準(zhǔn)選項按鈕組類型
int,//標(biāo)準(zhǔn)信息圖標(biāo)類型
Icon,//自定義信息圖標(biāo)
Object[],//自定義選項按鈕組
Object//自定義默認(rèn)的選項按鈕
);
//該方法提供了豐富且復(fù)雜的表達形式,請參閱幫助文檔注:使用這些標(biāo)準(zhǔn)對話框,可以方便實現(xiàn)某些功能基本組件—對話框(
JOptionPane)562021/6/28微調(diào)器(JSpinner)
構(gòu)造方法JSpinnerspinner=newJSpinner();常用方法voidaddChangeListener(ChangeListener);voidsetValue(Object);ObjectgetValue();ObjectgetNextValue();ObjectgetPreviousValue();572021/6/28示例:學(xué)生信息管理系統(tǒng)JFramef=newJFrame();……Containercon=f.getContentPane();Jpanelpan=newJPanel();……JLabellb=newJLabel("年齡");JSpinnerjsp=newJSpinner();jsp.setValue(newInteger(20));pan.add(lb);pan.add(jsp);……con.add(pan);f.setVisible(true);步驟二:添加年齡微調(diào)器582021/6/28計時器(Timer)
構(gòu)造方法Timer(int,ActionListener);
Timertimer=newTimer(1000,this);常用方法voidstart();voidstop();voidrestart();voidsetDelay(int);voidsetRepeats(boolean);booleanisRunning();592021/6/28創(chuàng)建邊框(使用BorderFactory類的類方法)Borderborder1=//創(chuàng)建一個具有指定顏色和寬度的線邊框BorderFactory.createLineBorder(Color,int);Borderborder2=
BorderFactory.createTitledBorder(String);
創(chuàng)建一個新標(biāo)題邊框,采用默認(rèn)設(shè)置,并指定了標(biāo)題文本。Borderborder3=BorderFactory.createLoweredBevelBorder();
創(chuàng)建一個具有凹入斜面邊緣的邊框Borderborder4=
BorderFactory.createRaisedBevelBorder();創(chuàng)建一個具有凸出斜面邊緣的邊框Borderborder5=
BorderFactory.createEtchedBevelBorder();創(chuàng)建一個具有“浮雕化”外觀效果的邊框,將組件的當(dāng)前背景色用于突出顯示和陰影顯示使用setBorder(border)方法設(shè)置組件的邊框組件的邊框設(shè)置邊框(Border)602021/6/28分隔線(JSeparator)構(gòu)造方法JSeparatorseparator1=
newJSeparator();//默認(rèn)水平JSeparatorseparator2=
newJSeparator(JSeparator.HORIZONTAL);JSeparatorseparator3=
newJSeparator(JSeparator.VERTICAL);使用add(JSeparator)方法加到合適的地方組件的分隔線設(shè)置612021/6/28設(shè)置顏色默認(rèn)情況下,Java使用RGB顏色描述系統(tǒng)RGB指紅/綠/藍(lán)三基色,取值范圍是[0,255],一種顏色就是這三種基本顏色的組合描述顏色的類是java.awt.Color顏色對象的創(chuàng)建Colorc=newColor(0,255,0);直接使用Color類中定義的標(biāo)準(zhǔn)顏色常量
如Color.BLACK
或Color.black
等 Colorc1=Color.BLACK;//Color.blackC)顏色選擇器JColorChooser直觀得到一個Color對象Colorc3=JColorChooser.showDialog(
Component,String,Color);組件的顏色設(shè)置有了Color對象后,可使用
setForeground(Color);
setBackground(Color);
設(shè)置組件的前景色和背景色組件的顏色設(shè)置字體類:java.awt.Font字體對象的創(chuàng)建Font(Stringname,intstyle,intsize);
//名稱,如“隸書”
//風(fēng)格,取值有PLAIN,BOLD,ITALIC
//大小,如24,60Fontf=newFont(“宋體”,Font.BOLD,24);設(shè)置組件的字體setFont(Font);組件的字體設(shè)置光標(biāo)類:java.awt.Cursor光標(biāo)對象的獲取Cursor.getPredefinedCursor(int);
//如:DEFAULT_CURSOR、HAND_CURSOR、WAIT_CURSOR、TEXT_CORSOR、CROSSHAIR_CURSOR設(shè)置組件的光標(biāo)setCursor(Cursor.HAND_CURSOR);組件的光標(biāo)設(shè)置JPanel創(chuàng)建對象
JPanelp=newJPanel();默認(rèn)布局為FlowLayout,可以改變,如
p.setLayout(newGridLayout(2,3));添加組件
p.add(組件對象1);
p.add(組件對象2);
……中間容器的使用JScrollPaneJTextAreata=newJTextArea(50,50);JScrollPanesp=newJScrollPane(ta);JSplitPaneJTextAreata=newJTextArea(50,50);JPanelp=newJPanel();JSplitPanesp=newJSplitPane(JSplitPane. HORIZONTAL_SPLIT,ta,p);//另一種方式JSplitPanesp=new
JSplitPane(JSplitPane.VERTICAL_SPLIT,true,ta,p);中間容器的使用JTabbedPaneJTabbedPanetp=newJTabbedPane();tp.setTabPlacement(int);tp.addChangeListener(ChangeListener);JPanelp1=newJPanel();JPanelp2=newJPanel();tp.addTab(“p1”,p1);tp.addTab(“p2”,p2);tp.removeTabAt(0);intn=tp.getTabCount();中間容器的使用JInternalFrame示例:ExampleCh07_Jframe.java中classJInternalFrame_test中間容器的使用Java用戶圖形界面設(shè)計步驟根據(jù)需要往界面中添加組件通過布局管理器對容器中的組件進行組織排列如何相應(yīng)用戶對組件的操作,即事件處理小結(jié)布局管理布局是指組件在容器中的排列方式,主要有:FlowLayout 流式布局BorderLayout 邊界布局GridLayout 網(wǎng)格布局CardLayout 卡片布局BoxLayout 盒式布局GridBagLayout 網(wǎng)格包布局null 空布局(不使用布局)注:對于一些復(fù)雜的情況,往往需要使用容器的嵌套,各容器可使用不同的布局。當(dāng)容器的尺寸改變時,布局管理器會自動調(diào)整組件的排列布局的概念該布局以行為單位依次排列各組件,一行排不下時,另起一行JPanel的默認(rèn)布局是FlowLayout構(gòu)造方法FlowLayout();FlowLayout(intalign);
//align一般取值有:CENTER、LEFT、RIGHTFlowLayout(intalign,inthgap,intvgap);
//hgap和vgap指定組件與容器起始邊界以及組件間的水平和垂直間距,默認(rèn)值為5個像素例如:FlowLayoutlayout=new
FlowLayout(FlowLayout.LEFT,10,10);FlowLayout創(chuàng)建FlowLayout布局對象
FlowLayoutl=newFlowLayout();創(chuàng)建容器對象
JPanelpanel=newJPanel();設(shè)置容器對象的布局或使用默認(rèn)布局
panel.setLayout(l);向容器中添加組件對象(設(shè)組件對象已創(chuàng)建)
panel.add(組件對象);FlowLayout布局的使用例如,setLayout(newFlowLayout(FlowLayout.LEFT,10,20));缺點:當(dāng)用戶對由FlowLayout布局管理的區(qū)域進行縮放時,布局發(fā)生變化。該布局適用于組件個數(shù)較少的情況。FlowLayout布局的使用752021/6/28按照東、西、南、北、中5個方位排列各組件頂層容器JFrame、JApplet、JDialog、JWindow的默認(rèn)布局都是BorderLayoutBorderLayout構(gòu)造方法BorderLayout();BorderLayout(inthgap,intvgap);
//hgap和vgap指定組件間的水平和垂直間距,默認(rèn)值為0個像素例如:BorderLayoutlay1=newBorderLayout(); BorderLayoutlay2=newBorderLayout(10,10);BorderLayout創(chuàng)建BorderLayout布局對象
BorderLayoutl=newBorderLayout();創(chuàng)建容器對象
JPanelpanel=newJPanel();設(shè)置容器對象的布局或使用默認(rèn)布局
panel.setLayout(l);向容器中添加組件對象(設(shè)組件對象已創(chuàng)建)
panel.add(組件對象,方位);
//方位的取值為:
BorderLayout.EAST或“East”
BorderLayout.WEST或“West”
BorderLayout.SOUTH或“South”
BorderLayout.NORTH或“North”
BorderLayout.CENTER或“Center”(默認(rèn))BorderLayout布局的使用缺點:當(dāng)加入的組件超過5個時,就必須使用容器的嵌套或其它布局。優(yōu)點:當(dāng)容器縮放時,組件相應(yīng)的位置不變化,但大小改變。示例:
邊界布局示例BorderLayout布局的使用按照二維網(wǎng)格以相同大小依次排列各組件構(gòu)造方法GridLayout();//一行、每個組件一列GridLayout(introws,intcols);//行列數(shù)GridLayout(rows,cols,inthgap,intvgap);
//行行、列列的間距,默認(rèn)值為0個像素例如:GridLayoutlay1=newGridLayout(3,3);GridLayoutlay2=newGridLayout(5,2,10,10);GridLayout創(chuàng)建GridLayout布局對象
GridLayoutl=newGridLayout(2,2);創(chuàng)建容器對象
JPanelpanel=newJPanel();設(shè)置容器對象的布局或使用默認(rèn)布局
panel.setLayout(l);向容器中添加組件對象(設(shè)組件對象已創(chuàng)建)
panel.add(組件對象);布局的使用該布局適用于組件個數(shù)較多的情況。優(yōu)點:組件的相應(yīng)位置不隨區(qū)域的縮放而改變,只是組件的大小改變。GridLayout從網(wǎng)格出發(fā)來布局組件,但一個組件在橫向和縱向上都可以占據(jù)多個網(wǎng)格,靈活但比較復(fù)雜使用GridBagConstraints指定組件在布局時的有關(guān)約束值GridBagLayout屬性(11個)gridx,gridy–位置gridwidth,gridheight–占據(jù)網(wǎng)格數(shù)anchor–方位fill–充滿方式j(luò)avax.awt.GridBagConstraints.HORIZONTALjavax.awt.GridBagConstraints.VERTICALjavax.awt.GridBagConstraints.BOTH創(chuàng)建對象GridBagConstraintsgbc1,gbc2;gbc1=newGridBagConstraints();gbc2=newGridBagConstraints(…);GridBagConstraintsGridBagLayoutgbl=newGridBagLayout();JPanelpanel=newJPanel();panel.setLayout(gbl);GridBagConstraintsgbc=newGridBagConstraints();
……//設(shè)置JButtonbutton=newJButton("Button");panel.add(button,gbc);布局的使用畫出組件布局草圖確定每個組件應(yīng)占據(jù)的網(wǎng)格分別在x和y方向上為網(wǎng)格標(biāo)上序號組件的gridx,gridy,gridwidth,gridheight據(jù)填充和對齊要求設(shè)置fill和anchor值須保持默認(rèn)大小的組件的weightx和weighty值設(shè)為0,其余的設(shè)為100看是否需要設(shè)置填塞值insets和ipadx、ipady編寫代碼運行程序,觀察結(jié)果,必要時進行修改一般布局步驟該布局以一疊卡片的形式依次排列各組件構(gòu)造方法CardLayout();CardLayout(inthgap,intvgap);
//組件與容器邊界間距,默認(rèn)值為0個像素例如:
CardLayoutlayout1=newCardLayout();CardLayoutlayout2=newCardLayout(10,10);CardLayout創(chuàng)建CardLayout布局對象
CardLayoutl=newCardLayout();創(chuàng)建容器對象
JPanelpanel=newJPanel();設(shè)置容器對象的布局或使用默認(rèn)布局
panel.setLayout(l);向容器中添加組件對象(設(shè)組件對象已創(chuàng)建)
panel.add(組件對象,“名稱”);顯示組件l.show(panel,“名稱”);l.first(panel);l.last(panel);l.next(panel);l.previous(panel);布局的使用以一行或一列的方式依次排列各組件容器Box的默認(rèn)布局為且只能為BoxLayout在實際應(yīng)用中,常使用Box的有關(guān)方法實現(xiàn)布局javax.swing.Box類的使用創(chuàng)建Box對象
Boxb1=Box.createHorizontalBox();
創(chuàng)建一個從左到右顯示其組件的Box
Boxb2=Box.createVerticalBox();
創(chuàng)建一個從上到下顯示其組件的Box向盒子中添加組件對象(設(shè)組件對象已創(chuàng)建)
b1.add(組件對象);BoxLayout添加Glue:Glue用來對組件進行擠壓,產(chǎn)生左對齊、右對齊或兩端對齊的效果b1.add(Box.createHorizontalGlue());b2.add(Box.createVerticalGlue());添加Strut:Strut用來加入組件間的間距b1.add(Box.createHorizontalStrut(5));b2.add(Box.createVerticalStrut(5));添加RigidArea:RigidArea用來設(shè)置組件的間距和高度(寬度和間距)Dimensiond=newDimension(50,80);b1.add(Box.createRigidArea(d));b2.add(Box.createRigidArea(d));向盒子中添加必要的透明組件不使用任何布局管理器,一般不使用該方式空布局的使用創(chuàng)建容器對象
JPanelpanel=newJPanel();設(shè)置容器對象的布局為null
panel.setLayout(null);設(shè)置組件在容器中的位置
組件對象.setBounds(x,y,width,height);向容器中添加組件對象(設(shè)組件對象已創(chuàng)建)
panel.add(組件對象);NULL如實現(xiàn)以下界面,可以采用哪些布局管理方式:布局管理器的選擇事件處理事件處理機制事件:Java語言將每一個鍵盤或鼠標(biāo)的操作定義為一個“事件”。clickme!當(dāng)用戶點擊了一個按鈕,意味著一個按鈕事件的發(fā)生。事件響應(yīng):當(dāng)事件發(fā)生時程序應(yīng)該作出何種響應(yīng)。事件處理方法對該事件進行響應(yīng)事件處理概述942021/6/28事件處理的模型事件源:產(chǎn)生事件的組件叫事件源。事件對象:描述系統(tǒng)中發(fā)生了什么的對象事件監(jiān)聽器:對事件進行處理的類。事件對象事件監(jiān)聽器事件源事件處理概述952021/6/28
Java有20多個預(yù)定義的事件類,它們包含了所有組件上可能發(fā)生的事件。每一個事件都有一個相應(yīng)的事件接口,事件接口中的事件處理方法完成對事件的處理。事件處理概述java.util.EventObjectjava.awt.AWTEventComponentEventAdjustmentEventItemEventActionEventTextEventFocusEventContainerEventInputEventPaintEventWindowEventKeyEventMouseEvent962021/6/28事件源事件對象事件監(jiān)聽器事件處理回顧創(chuàng)建一個實現(xiàn)了某個監(jiān)聽器接口的類972021/6/28常見的事件及其監(jiān)聽器一覽表事件名稱監(jiān)聽器主要用途W(wǎng)indowEventWindowListener窗口發(fā)生變化,如關(guān)閉ActionEventActionListener產(chǎn)生動作,如單擊按鈕ItemEventItemListener項目變化,如復(fù)選框ListSelectionEventListSelectionListener選擇列表中的項目時ChangeEventChangeListener狀態(tài)改變,如進度條FocusEventFocusListener焦點獲得或失去MouseEventMouseListener鼠標(biāo)點擊、進入或離開MouseEventMouseMotionListener鼠標(biāo)拖動或移動KeyEventKeyListener按鍵產(chǎn)生時MenuEventMenuListener菜單選擇時982021/6/28創(chuàng)建將要產(chǎn)生事件的組件對象構(gòu)造實現(xiàn)相應(yīng)事件監(jiān)聽器接口的類,并創(chuàng)建事件監(jiān)聽器對象為組件對象增加事件監(jiān)聽器對象:
組件對象.addXxxListener(事件監(jiān)聽器對象);
如:button.addActionListener(this);注:接口中的方法都含有所產(chǎn)生的事件對象參數(shù),使用該參數(shù)的getSource()方法可以得到產(chǎn)生該事件的事件源例如:publicvoidactionPerformed(ActionEventevt);事件處理一般方法992021/6/28ActionEvent與ActionListener當(dāng)單擊按鈕、在文本域中回車、選擇組合框中的項目、選擇菜單項時產(chǎn)生該事件ActionListener接口中的方法 voidactionPerformed(ActionEvent);該事件在實際應(yīng)用中經(jīng)常被處理ActionEvent中的常用方法
StringgetActionCommand();
//獲得與該動作相聯(lián)系的組件的命令字符串名稱,組件對象可使用
setActionCommand(String)方法進行設(shè)置,默認(rèn)的命令字符串名稱是組件的標(biāo)簽名稱//使用該方法可實現(xiàn)不同組件共用同一段處理代碼事件處理1002021/6/28
publicclassMyActionListenerextendsJFrameimplementsActionListener{privateJButtonbutton; publicMyActionListener() { button=newJButton(“開始”);
button.addActionListener(this); }
publicvoidactionPerformed(ActionEventevt) {if(evt.getSource()==button) {//(evt.getActionCommand().equals(“開始”)) System.out.println(“Start…”); } }}事件處理示例1012021/6/28示例在文本框中輸入英文單詞并回車,在另外一個文本框中立刻顯示漢語意思(TextFieldAction.java)1022021/6/281、創(chuàng)建一個主窗口,顯示一個按鈕,當(dāng)點擊該按鈕時,在標(biāo)題欄中顯示當(dāng)前的時間(DispTime.java)JFrameJButtonTimerActionListenerDateSimpleDateFormat2、點擊按鈕,在文本框中顯示點擊次數(shù)。 ActionTest.java示例1032021/6/28ItemEvent與ItemListener當(dāng)單選按鈕、復(fù)選按鈕、下拉列表框中的項目狀態(tài)發(fā)生變化時產(chǎn)生該事件ItemListener接口中的方法
voiditemStateChanged(ActionEvent);ItemEvent中的常用方法ObjectgetItem();
//返回受該事件影響的項目對象,據(jù)需要可將Object轉(zhuǎn)換為相應(yīng)的類型intgetStateChange();
//返回項目狀態(tài)發(fā)生變化的類型,取值:
ItemEvent.SELECTED
ItemEvent.DESELECTED事件處理1042021/6/28單選按鈕、復(fù)選按鈕、下拉列表框觸發(fā)事件ItemEventTest.java示例1052021/6/28WindowEvent與WindowListenerWindowListener接口中的方法voidwindowActivated(WindowEvent);//處理窗口被設(shè)置為當(dāng)前活動窗口時觸發(fā)的事件voidwindowDeactivated(WindowEvent);//處理窗口被設(shè)置為非活動窗口時觸發(fā)的事件voidwindowIconified(WindowEvent);//處理窗口最小化時觸發(fā)的事件voidwindowDeiconified(WindowEvent);//處理窗口從最小化變?yōu)檎4笮r觸發(fā)的事件voidwindowOpened(WindowEvent);//處理窗口第一次顯示時觸發(fā)的事件voidwindowClosing(WindowEvent);//處理用戶試圖關(guān)閉窗口時觸發(fā)的事件voidwindowClosed(WindowEvent);//處理窗口被關(guān)閉時觸發(fā)的事件事件處理1062021/6/28WindowAdapter適配器
WindowListener接口中含有較多的方法,實現(xiàn)時比較麻煩。為此,Java提供了適配器類WindowAdapter,該類實現(xiàn)了WindowListener接口,可用該類或其子類創(chuàng)建監(jiān)聽器注:凡含兩個以上方法的監(jiān)聽器都有對應(yīng)的適配器適配器類實現(xiàn)一個對應(yīng)的接口,只是方法為空。publicabstractclassWindowAdapterimplementsWindowListener{ publicvoidwindowOpened(WindowEvente){} publicvoidwindowActivated(WindowEvente){} publicvoidwindowDeactivated(WindowEvente){} publicvoidwindowClosed(WindowEvente){} publicvoidwindowClosing(WindowEvente){} publicvoidwindowIconified(WindowEvente){} publicvoidwindowDeiconified(WindowEvente){}}事件處理1072021/6/28事件適配器類(Adapter)只實現(xiàn)接口所需要處理的方法通過覆蓋對于接口中的其它方法:系統(tǒng)會提供默認(rèn)的方法(方法體為空)事件適配器類與事件監(jiān)聽器接口的區(qū)別?利用事件適配器類,只需實現(xiàn)所需處理的方法利用事件監(jiān)聽器接口,必須實現(xiàn)所有的方法事件適配器類1082021/6/28publicclassMyWindowListenerextendsJFrame{publicMyWindowListner(){JFramef=newJFrame();f.addWindowListener(newWindowAdapter() { publicvoidwindowClosing(WindowEventevt) { System.exit(0); }});
//setDefaultCloseOperation(EXIT_ON_CLOSE);}//匿名內(nèi)部類}事件處理示例1092021/6/28ListSelectionEvent與ListSelectionListener當(dāng)列表框中的項目發(fā)生變化時產(chǎn)生該事件ListSelectionListener接口中的方法voidvalueChanged(ListSelectionEvent);處理事件時常使用列表框(JList)對象本身提供的一些方法事件處理1102021/6/28ChangeEvent與ChangeListener當(dāng)進度條,滑動條、微調(diào)器、標(biāo)簽窗格等組件的狀態(tài)發(fā)生變化時產(chǎn)生該事件ChangeListener接口中的方法voidstateChanged(ChangeEvent);事件處理1112021/6/28FocusEve
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 游戲跨平臺營銷效果比較-洞察分析
- 月球基地安全防護技術(shù)-洞察分析
- 物理層切片技術(shù)探索-洞察分析
- 細(xì)胞骨架在腫瘤發(fā)生發(fā)展中的角色-洞察分析
- 熊去氧膽酸與腸黏膜修復(fù)機制-洞察分析
- 2024年05月江蘇上海銀行蘇州分行暑期實習(xí)生招考筆試歷年參考題庫附帶答案詳解
- 2024年棲霞市中醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 養(yǎng)護勞務(wù)合同(2篇)
- 2025年統(tǒng)編版2024選擇性必修3歷史下冊階段測試試卷
- 2024年曲靖市第一人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- IT項目周報模板
- 地脈動測試原理及應(yīng)用
- 基坑排水計算
- 溝槽式連接管道工程技術(shù)規(guī)程
- 原料罐區(qū)設(shè)備操作規(guī)程
- 廈門市2023-2024學(xué)年度初中語文初一上學(xué)期語文期末質(zhì)量檢測
- 項目施工員安全生產(chǎn)責(zé)任制考核記錄
- 中職英語教學(xué)總結(jié)
- 高中數(shù)學(xué)人教A版知識點與公式大全
- 2023年八省聯(lián)考普通高等學(xué)校招生全國統(tǒng)一考試語文試題含答案
- 《Windows 網(wǎng)絡(luò)操作系統(tǒng)》-教學(xué)教案
評論
0/150
提交評論