java入門09Swing編程(10學(xué)時(shí))_第1頁(yè)
java入門09Swing編程(10學(xué)時(shí))_第2頁(yè)
java入門09Swing編程(10學(xué)時(shí))_第3頁(yè)
java入門09Swing編程(10學(xué)時(shí))_第4頁(yè)
java入門09Swing編程(10學(xué)時(shí))_第5頁(yè)
已閱讀5頁(yè),還剩66頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

主講教師張智計(jì)算機(jī)學(xué)院網(wǎng)絡(luò)工程系9Swing編程9.1JFrame框架9.2布局管理器9.3常用組件9.1JFrame框架JFrame是一個(gè)頂層容器,主要用來(lái)設(shè)計(jì)應(yīng)用程序的圖形用戶界面。JFrame支持多線程。創(chuàng)建過程N(yùn)ew→Other→Swing→MatisseForm選擇JFrame。publicclasshelloJFrame

extendsjavax.swing.JFrame{

publichelloJFrame(){initComponents();}

privatevoidinitComponents(){setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);javax.swing.GroupLayoutlayout=newjavax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0,400,Short.MAX_VALUE));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0,300,Short.MAX_VALUE));pack();}publicstaticvoidmain(Stringargs[]){java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newhelloJFrame().setVisible(true);}});}}構(gòu)造函數(shù)javax.swing.GroupLayoutlayout=newjavax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0,400,Short.MAX_VALUE));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0,300,Short.MAX_VALUE));pack();布局管理啟動(dòng)多線程顯示窗口繼承JFramehelloJFrame.javaJFrame常用屬性和方法注意:設(shè)置JFrame的背景顏色,仍然會(huì)被內(nèi)容面板蓋住,不如設(shè)置內(nèi)容面板的背景顏色:getContentPane().setBackground(Color.Red);JFrame常用屬性和方法(續(xù))單獨(dú)使用setSize()時(shí),是按照設(shè)置的大小顯示的;此時(shí)不能使用pack(),否則自動(dòng)適配內(nèi)容面板:JFrame一旦創(chuàng)建,在其中就已經(jīng)包含一個(gè)內(nèi)容面板,一般往JFrame中添加組件時(shí),都加在內(nèi)容面板中多窗口示例再新建一個(gè)JFrame(命名為JFrame2.java),設(shè)置在第一個(gè)JFrame中添加一個(gè)成員變量:privatenewJFrame=newJFrame2();在第一個(gè)JFrame中添加一個(gè)JButton,右擊按鈕添,加一個(gè)單擊事件(Events→Action→actionPerformed方法)和代碼:newJFrame.setTitle("第二個(gè)窗口");newJFrame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);newJFrame.setVisible(true);有關(guān)Java事件處理參考P214【Return】9.2布局管理器容器中可以容納組件,在往容器中添加多個(gè)組件時(shí),要考慮這些組件在容器中的布局。由于Java是跨平臺(tái)語(yǔ)言,使用絕對(duì)坐標(biāo)會(huì)導(dǎo)致問題:即在不同平臺(tái)、不同分辨率下的顯示效果不一樣。為了實(shí)現(xiàn)跨平臺(tái)的特性并且獲得動(dòng)態(tài)的布局效果,Java將容器內(nèi)的所有組件安排給一個(gè)“布局管理器”負(fù)責(zé)管理。Java提供的布局管理器類BorderLayoutFlowLayoutGirdLayoutCardLayoutBoxLayoutGirdBagLayoutGroupLayout(MatisseForm默認(rèn))【Return】有關(guān)其他布局參考P219BorderLayout布局BorderLayout把容器空間劃分為東、西、南、北、中5個(gè)區(qū)域。BorderLayout.EASTBorderLayout.WESTBorderLayout.SOUTHBorderLayout.NORTHBorderLayout.CENTERBorderLayout是頂層容器(JFrame/Jdialog/JApplet)

默認(rèn)的布局管理器。BorderLayout布局用法示例BorderLayout構(gòu)造函數(shù):BorderLayout():創(chuàng)建一個(gè)組件之間沒有水平和垂直間距的BorderLayout布局。BorderLayout(inthgap,intvgap):通過參數(shù)hgap和vgap分別設(shè)定組件的水平和垂直間距。JFrame使用setLayout(newBorderLayout())方法來(lái)創(chuàng)建布局管理器。當(dāng)需要在使用BorderLayout布局的容器中添加組件時(shí),可用add方法,例如:

add(組件,BorderLayout.EAST);//將組件放在東邊testBorderLayout.javapackagetestSwing;importjava.awt.BorderLayout;importjavax.swing.*;publicclasstestBorderLayout

extendsJFrame{publictestBorderLayout(){//this.setLayout(newBorderLayout(5,5));設(shè)置組件間水平和垂直間距this.add(newJButton("東"),BorderLayout.EAST);this.add(newJButton("西"),BorderLayout.WEST);this.add(newJButton("南"),BorderLayout.SOUTH);this.add(newJButton("北"),BorderLayout.NORTH);this.add(newJButton("中"),BorderLayout.CENTER);}publicstaticvoidmain(String[]args){

testBorderLayoutframe=newtestBorderLayout();frame.setTitle("testBorderLayout");//設(shè)置標(biāo)題frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設(shè)置窗口關(guān)閉操作//frame.setSize(300,400);//設(shè)置窗口的寬和高frame.setBounds(100,100,300,400);//設(shè)置窗口初始位置和寬高frame.setVisible(true);//顯示窗口}}手工寫的class不使用MatisseForm創(chuàng)建往容器中添加組件并配置布局【Return】FlowLayout布局FlowLayout布局管理器把容器看成一個(gè)行集,好象平時(shí)在一張紙上寫字一樣,一行寫滿就換下一行。默認(rèn)情況下組件按添加的先后順序從左至右擺放,如果一行排滿,則在下一行中繼續(xù)。默認(rèn)情況下,容器中的每一行組件都居中對(duì)齊。FlowLayout布局示例FlowLayout構(gòu)造函數(shù):FlowLayout():創(chuàng)建一個(gè)默認(rèn)FlowLayout布局。FlowLayout(intalign):align對(duì)齊方式:FlowLayout.LEFT/FlowLayout.CENTER/FlowLayout.RIGHT。FlowLayout(intalign,inthgap,intvgap):align對(duì)齊方式,hagap和vgap指定組件水平和垂直間距。testFlowLayout.javapackagetestSwing;importjava.awt.FlowLayout;importjavax.swing.*;publicclasstestFlowLayout

extendsJFrame{publictestFlowLayout(){this.setLayout(newFlowLayout());for(inti=0;i<10;i++){this.add(newJButton("JButton"+i));}}publicstaticvoidmain(String[]args){

testFlowLayoutframe=newtestFlowLayout();frame.setTitle("testFlowLayout");//設(shè)置標(biāo)題frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設(shè)置窗口關(guān)閉操作frame.setBounds(100,100,300,200);//設(shè)置窗口初始位置和寬高frame.setVisible(true);//顯示窗口}}手工寫的class不使用MatisseForm創(chuàng)建【Return】9.3常用組件文本組件選擇組件Panel組件對(duì)話框菜單組件【Return】9.3.1文本組件JLabelJTextFieldJPasswordFieldJTextArea【Return】JLabel特殊Jlabel--顯示圖形【Return】JTextFieldJTextField常用事件actionPerformed:回車事件focusGained/lostFocus:獲得/失去焦點(diǎn)事件keyPressed/keyReleased:按下/釋放鍵盤時(shí)事件keyTyped:打字符事件示例jTextField1jTextField2jTextField3jLabel2jLabel4主要代碼“啟用”按鈕actionPerformed事件:jTextField1.setEditable(true);“禁用”按鈕actionPerformed事件:jTextField1.setEditable(false);“獲取輸入值”按鈕actionPerformed事件:JOptionPane.showMessageDialog(null,jTextField1.getText());jTextField1的actionPerformed事件:

jLabel2.setText("你輸入的是:"+jTextField2.getText());jTextField2的focusGained事件:

jTextField4.setText("");jTextField2的KeyReleased事件:

jLabel4.setText("你輸入的是:"+jTextField3.getText());創(chuàng)建對(duì)話框補(bǔ)充:DocumentListener監(jiān)聽器jTextField對(duì)象.getDocument().addDocumentListener(new javax.swing.event.DocumentListener(){publicvoidchangedUpdate(DocumentEvente){ //這是更改操作的處理}publicvoidinsertUpdate(DocumentEvente){ //這是插入操作的處理}publicvoidremoveUpdate(DocumentEvente){ //這是刪除操作的處理}});DocumentListener示例jTextField4.getDocument().addDocumentListener(new javax.swing.event.DocumentListener(){publicvoidchangedUpdate(DocumentEvente){ jLabel5.setText("你輸入的是:"+jTextField4.getText());}publicvoidinsertUpdate(DocumentEvente){ jLabel5.setText("你輸入的是:"+jTextField4.getText());}publicvoidremoveUpdate(DocumentEvente){ jLabel5.setText("你輸入的是:"+jTextField4.getText());}});【Return】JPasswordField與JTextField用法類似注意:此方法返回類型是字符數(shù)組char[],如果要轉(zhuǎn)換為字符串,可用newString(JPasswordField1.getPassword())示例:登錄窗口登錄按鈕ActionPerformed代碼privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){Stringusername,psd;username=jTextField1.getText();psd=newString(jPasswordField1.getPassword());if(username.equals("wustzz")&&psd.equals("123456"))

JOptionPane.showMessageDialog(this,"歡迎"+username);else{

JOptionPane.showMessageDialog(this,"用戶名或密碼錯(cuò)!");}}轉(zhuǎn)化一下字符串比較用equlas()方法創(chuàng)建對(duì)話框取消按鈕ActionPerformed代碼privatevoidjButton2ActionPerformed(java.awt.event.ActionEventevt){dispose();//回收一下System.exit(0);//結(jié)束程序}改進(jìn)一下:3次輸入錯(cuò)誤,關(guān)閉登錄窗體添加一個(gè)計(jì)數(shù)器:privateinterrCount=0;登錄按鈕代碼:if(username.equals("wustzz")&&psd.equals("123456"))…else{newJOptionPane().showMessageDialog(this,"用戶名或密碼錯(cuò)!");errCount++;}if(errCount==3){JOptionPane.showMessageDialog(this,"3次輸入錯(cuò)誤,將關(guān)閉登錄窗體!");dispose();System.exit(0);}【Return】JTextArea示例主要代碼if(jTextArea1.getSelectedText()!=null){

jTextArea1.copy();

jTextArea1.select(-1,-1);//取消選中}else{JOptionPane.showMessageDialog(null,"請(qǐng)選擇文本");}復(fù)制按鈕if(jTextArea1.getSelectedText()!=null){

jTextArea1.cut();}else{JOptionPane.showMessageDialog(null,"請(qǐng)選擇文本");}剪切按鈕jTextArea2.paste();剪切按鈕【Return】9.3.2選擇組件JButtonJCheckboxJRadioButtonJComboBoxJList【Return】JButtonactionPerformed事件操作jButton1.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){

jButton1ActionPerformed(evt);}});privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){//處理代碼}【Return】JCheckboxitemStateChanged事件jCheckBox1.addItemListener(newjava.awt.event.ItemListener(){publicvoiditemStateChanged(java.awt.event.ItemEventevt){ jCheckBox1ItemStateChanged(evt);}});privatevoidjCheckBox1ItemStateChanged(java.awt.event.ItemEventevt){if(jCheckBox1.isSelected()){//復(fù)選框選中//處理代碼

}else{//沒有選中//處理代碼}

}itemStateChanged事件示例【Return】privatevoidjCheckBox1ItemStateChanged(java.awt.event.ItemEventevt){if(jCheckBox1.isSelected()){jLabel1.setFont(newjava.awt.Font("微軟雅黑",Font.BOLD,18));

}else{jLabel1.setFont(newjava.awt.Font("微軟雅黑",Font.PLAIN,18));}}設(shè)置字體的方法JRadioButtonJRadioButton分組同一組的單選按鈕每一時(shí)刻只能選擇一個(gè)。使用ButtonGroup類來(lái)分組,然后利用add()方法,把若干個(gè)單選按鈕歸組。用法示例:將ButtonGroup組件放入設(shè)計(jì)窗口中(該組件不可見);privatejavax.swing.ButtonGroupbuttonGroup1;buttonGroup1=newjavax.swing.ButtonGroup();使用add方法:buttonGroup1.add(jRadioButton1);buttonGroup1.add(jRadioButton2);這樣jRadioButton1和jRadioButton2在同一組。代碼自動(dòng)生成itemStateChanged事件示例【Return】privatevoidjRadioButton1ItemStateChanged(java.awt.event.ItemEventevt){if(jRadioButton1.isSelected()){JOptionPane.showMessageDialog(null,"你選中了男");}}JComboBoxJComboBox用法示例設(shè)計(jì)時(shí)編輯model屬性:生成的代碼:jComboBox1.setModel(newjavax.swing.DefaultComboBoxModel(newString[]{"北京","上海","武漢"}));JComboBox用法示例(續(xù))使用構(gòu)造函數(shù)創(chuàng)建:String[]strs={"故宮","泰山","張家界","頤和園","孔府"};JComboBoxjComboBox1=newJComboBox(strs);

JComboBox常用方法簡(jiǎn)單測(cè)試幾個(gè)JComboBox示例--級(jí)聯(lián)創(chuàng)建JComboBox1:添加"北京","上海","武漢"幾項(xiàng)創(chuàng)建JComboBox2:設(shè)置為空項(xiàng):jComboBox2.setModel(newjavax.swing.DefaultComboBoxModel());JComboBox1添加ItemStateChanged事件:intindex=jComboBox1.getSelectedIndex();switch(index){case0:

jComboBox2.removeAllItems();jComboBox2.addItem("北京大學(xué)");…break;case1:…}【Return】JList構(gòu)造函數(shù):String[]strs={"北京","上海","武漢"};JListlist=newJList(strs);滾動(dòng)問題JList本身不支持滾動(dòng),要滾動(dòng)必須放到JScrollPane中:JScrollPanemyScrollPane=newJScrollPane();myScrollPane.setViewportView(jList1);也可使用:JScrollPanemyScrollPane=newJScrollPane(jList1);

//不使用myScrollPane.add(jList1);

MatisseForm代碼自動(dòng)使用JList常用方法JList示例--多值處理int[]indexs={1,2};

jList1.setSelectedIndices(indexs);//選中多項(xiàng)for(Objecto:jList1.getSelectedValues()){//遍歷選中項(xiàng)System.out.print(o.toString());}

前提:selectionMode為多選JList+Vector+setListData方法添加/刪除元素

Vectorvt=newVector();vt.add("北京");vt.add("上海");vt.add("武漢");

jList1.setListData(vt);vt.remove("上海");//或用vt.remove(intindex);有關(guān)Vector用法請(qǐng)參考JDKJList+Vector+setListData方法改進(jìn)Vectorvt=newVector();

ListModellistModel=jList1.getModel();//獲取JList的modelfor(intindex=0;index<listModel.getSize();index++)

vt.add(listModel.getElementAt(index));vt.add("北京");vt.add("上海");jList1.setListData(vt);vt.remove("上海");vt.add("深圳");保留原來(lái)的內(nèi)容再添加新的保留原來(lái)的內(nèi)容添加新內(nèi)容JList+setModel方法來(lái)添加/刪除元素//先用DefaultListModel來(lái)初始化JList:DefaultListModeldlm1=newDefaultListModel();dlm1.addElement("北京");dlm1.addElement("上海");dlm1.addElement("武漢");jList1.setModel(dlm1);//接著添加/刪除操作:DefaultListModeldlm2=(DefaultListModel)jList1.getModel();//追加元素dlm2.addElement("廣州");//或用.add(序號(hào)值,"廣州");dlm2.removeElement("武漢");jList1.setModel(dlm2);強(qiáng)制轉(zhuǎn)換的前提是jList的model已經(jīng)是DefaultListModel類型【Return】9.3.3Panel組件JPanelJTabbedPanel【Return】JPanel在MatisseForm中,JPanel使用GroupLayout布局,不需要手工設(shè)置布局。√使用border屬性可設(shè)置邊框,但邊框上沒有文字。設(shè)置的邊框上沒有文字在邊框上添加文字自定義邊框方法:

.setBorder(newTitledBorder(Boder類型,"邊框文字"))例如:jPanel1.setBorder(newTitledBorder(

BorderFactory.createEtchedBorder(),"邊框文字"));JPanel示例–手工布局主要代碼Containercp=getContentPane();cp.setLayout(newFlowLayout());//設(shè)置JFrame布局

JButtonjb=newJButton("JButton");BasicArrowButtonup=newBasicArrowButton(BasicArrowButton.NORTH),down=newBasicArrowButton(BasicArrowButton.SOUTH),right=newBasicArrowButton(BasicArrowButton.EAST),left=newBasicArrowButton(BasicArrowButton.WEST);//創(chuàng)建JPanel并設(shè)置布局JPaneljp=newJPanel();jp.setPreferredSize(newDimension(100,100));//設(shè)置JPanel的大小jp.setLayout(newGridLayout(2,2));jp.setBorder(newTitledBorder("方向按鈕"));//為JPanel添加標(biāo)題√//將組件添加到Panel中jp.add(up);jp.add(down);jp.add(left);jp.add(right);//將Panel添加到JFrame中cp.add(jb);cp.add(jp);【Return】JTabbedPaneJTabbedPane選項(xiàng)卡每個(gè)選項(xiàng)卡中又是一個(gè)Panel組件創(chuàng)建過程(JTabbedPane+JPanel)創(chuàng)建一個(gè)JTabbedPane。代碼:

JTabbedPanejTabbedPane1=newJTabbedPane();將一個(gè)JPanel放在TabbedPane上部。代碼:JPaneljPanel1=newJPanel();

jTabbedPane1.addTab("tab1",jPanel1);

JTabbedPaneJPanel虛線狀態(tài)第一個(gè)參數(shù)是選項(xiàng)卡標(biāo)題使用addTab方法將Panel添加到TabbedPane中創(chuàng)建過程(JTabbedPane+JPanel)續(xù)如果有多個(gè)選項(xiàng)卡,則重復(fù)上一步操作。最后選擇不同的選項(xiàng)卡,將所需組件放置上去即可?!綬eturn】補(bǔ)充:(1)創(chuàng)建帶圖形的選項(xiàng)卡jTabbedPane1.addTab("名稱",newImageIcon("D:\\login.jpg"),jPanel1);(2)將選項(xiàng)卡放在下部:

jTabbedPane1.setTabPlacement(JTabbedPane.BOTTOM);(3)選擇某個(gè)選項(xiàng)卡為當(dāng)前選擇的選項(xiàng)頁(yè):jTabbedPane1.setSelectedIndex(序號(hào)值);//從0開始9.3.4對(duì)話框?qū)υ捒蚴且粋€(gè)臨時(shí)窗口,一般用來(lái)向用戶顯示信息或接收用戶輸入的信息。使用javax.swing.JOptionPane來(lái)創(chuàng)建對(duì)話框:JOptionPane.showMessageDialogJOptionPane.showConfirmDialogJOptionPane.showInputDialog對(duì)話框示例Stringname;intselection;do{

name=JOptionPane.showInputDialog("請(qǐng)輸入姓名:");

selection=JOptionPane.showConfirmDialog(null,“你的姓名是"+name+"?","請(qǐng)確認(rèn)",JOptionPane.YES_NO_OPTION);}while(selection!=JOptionPane.YES_OPTION);JOptionPane.showMessageDialog(null,"你的姓名是"+name);【Return】JMenuBar(菜單欄)JMenu(菜單)JMenuItemJRadioButtonMenuItemJCheckBoxMenuIte

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論