1、JAVA程式設計入門(II)2022/12/202 JPopupMenu彈出式選單元件 JMenuBar、JMenu與JMenuItem下拉式選單元件 JToolBar工具列元件 JFileChooser檔案選擇元件 JColorChooser色彩選擇元件 多重視窗大綱2022/12/203視窗功能表和工具列元件 Swing套件提供功能強大的視窗功能表和工具列元件,可以輕鬆建立應用程式視窗上方的下拉式功能表、工具列和彈出式選單。同樣的,視窗功能表和工具列元件也都是繼承自JComponent,其繼承架構如下圖所示:2022/12/204JPopupMenu彈出式選單元件-說明 JPopupMen
2、u彈出式選單元件繼承自JComponent,可以建立視窗應用程式滑鼠右鍵顯示的快顯功能表,內含選項的JMenuItem物件或JSeparator分隔線物件,如下圖所示:2022/12/205JPopupMenu彈出式選單元件-建立物件 在建立JPopupMenu物件後,使用add()方法新增選項的JMenuItem物件,addSeparator()方法可以新增選單分隔線的JSeparator物件。popup=new JPopupMenu();popup.add(blue=new JMenuItem(藍色);popup.add(yellow=new JMenuItem(黃色);popup.add
3、(green=new JMenuItem(綠色);popup.addSeparator();popup.add(紅色);2022/12/206JPopupMenu彈出式選單元件-事件處理 新增MouseListener傾聽者物件且實作mousePressed()和mouseReleased()方法來顯示彈出式視窗,如下所示:public void mousePressed(MouseEvent evt)if(evt.isPopupTrigger()popup.show(evt.getComponent(),evt.getX(),evt.getY();public void mouseRelea
4、sed(MouseEvent evt)if(evt.isPopupTrigger()popup.show(evt.getComponent(),evt.getX(),evt.getY();2022/12/207JPopupMenu建構子與方法 建構子:JPopupMenu()JPopupMenu(String):參數String是標題文字 方法:JMenuItem add(JMenuItem)JMenuItem add(String)void addSeparator()void insert(Component,int)void remove(JMenuItem)void remove(in
5、t)void removeAll()void show(Component,int,int)2022/12/208範例1:使用PopupMenu(1/4)建立Popup Menu的選擇項:1.import javax.swing.*;2.import java.awt.*;3.import java.awt.event.*;4./繼承JFrame類別,實作ActionListener介面5.public class Ch09_01 extends JFrame6.implements ActionListener7.private JPopupMenu popup;8.private JMen
6、uItem blue,yellow,green;9.private Container c;10./建構子11.public Ch09_01()12.super(JPopupMenu元件範例);13.c=getContentPane();14.c.setBackground(Color.pink);15.popup=new JPopupMenu();16.popup.add(blue=new JMenuItem(藍色);17.blue.addActionListener(this);18.popup.add(yellow=new JMenuItem(黃色);19.yellow.addActio
7、nListener(this);20.popup.add(green=new JMenuItem(綠色);21.green.addActionListener(this);22.popup.addSeparator();23.popup.add(紅色);/使用字串新增選項 2022/12/209範例1:使用PopupMenu(2/4)傾聽者:24.addMouseListener(new MouseAdapter()25.public void mousePressed(MouseEvent evt)26.if(evt.isPopupTrigger()/顯示選單27.popup.show(ev
8、t.getComponent(),28.evt.getX(),evt.getY();29.30.public void mouseReleased(MouseEvent evt)31.if(evt.isPopupTrigger()/顯示選單32.popup.show(evt.getComponent(),33.evt.getX(),evt.getY();34.35.);36.2022/12/2010範例1:使用PopupMenu(3/4)實作事件處理方法:37.public void actionPerformed(ActionEvent evt)38.if(evt.getSource()=b
9、lue)39.c.setBackground(Color.blue);/藍色40.if(evt.getSource()=yellow)41.c.setBackground(Color.yellow);/黃色42.if(evt.getSource()=green)43.c.setBackground(Color.green);/綠色44.repaint();/重繪45.2022/12/2011範例1:使用PopupMenu(4/4)主程式:46.public static void main(String args)47./建立Swing應用程式48.Ch09_01 app=new Ch09_0
10、1();49./關閉視窗事件,結束程式的執行50.app.addWindowListener(new WindowAdapter()51.public void windowClosing(WindowEvent evt)52.System.exit(0);53.);54.app.setSize(300,200);/設定尺寸55.app.setVisible(true);/顯示視窗56.57.2022/12/2012MenuMenu屬屬MenuComponentMenuComponent的延伸類別的延伸類別12ObjectMenuBarMenuItemMenuComponentMenuChec
11、kboxMenuItem2022/12/2013enuenu屬屬MenuComponentMenuComponent的延伸類的延伸類別別13以記事本為例說明選單及其相關元件MenuBarMenuMenuItemCheckboxMenuItem2022/12/201414enu屬屬MenuComponent的延伸類別的延伸類別Menu位於視窗標題列的下方位於視窗標題列的下方使用選單時,框架(使用選單時,框架(Frame)會有一個選單列)會有一個選單列(MenuBar),選單列內有數個選單(),選單列內有數個選單(Menu)每個每個Menu內會有多個選項(內會有多個選項(MenuItem)或核)或
12、核選式選項(選式選項(CheckboxMenuItem),選單是選項),選單是選項的容器的容器選單也可以是另一個選單的容器選單也可以是另一個選單的容器2022/12/2015JMenuBar、JMenu與JMenuItem下拉式選單元件-說明 在JFrame、JInternalFrame、JApplet和JDialog等類別的視窗新增下拉式功能表選單,類別建構子需要使用JMenuBar、JMenu和JMenuItem物件來建立下拉式功能表的物件。2022/12/2016JMenuBar、JMenu與JMenuItem下拉式選單元件-JMenuBar元件 JMenuBar元件是視窗上方的功能表列
13、,如下所示:JMenuBar jmb=new JMenuBar();setJMenuBar(jmb);上述程式碼建立JMenuBar物件後,預設是空的功能表列,然後使用setJMenuBar()方法新增到JFrame視窗,換句話說,目前在視窗上方已經擁有一個空的功能表列。2022/12/2017JMenuBar、JMenu與JMenuItem下拉式選單元件-JMenu元件 在建立好JMenuBar物件後,就可以新增功能表列下拉式子選單的JMenu物件,如下所示:JMenu file=new JMenu(檔案(F);JMenuItem item;file.add(item=new JMenuIt
14、em(新增(N),KeyEvent.VK_N);file.add(item=new JMenuItem(開啟(O),KeyEvent.VK_O);JMenu setting=new JMenu(參數設定);file.add(setting);file.addSeparator();file.add(item=new JMenuItem(關閉(X),KeyEvent.VK_X);jmb.add(file);2022/12/2018JMenuBar、JMenu與JMenuItem下拉式選單元件-Item元件JMenuItem、JCheckBoxMenuItem與JRadioButtonMenuIt
15、em元件 JMenuItem、JCheckBoxMenuItem與JRadioButtonMenuItem類別的建構子可以新增選單的選項、核取方塊和選項鈕選項。2022/12/2019範例2:建立Menu(1/5)基本宣告:1./*程式範例:Ch09_02.java*/2.import javax.swing.*;3.import java.awt.*;4.import java.awt.event.*;5./繼承JFrame類別,實作ActionListener介面6.public class Ch09_02 extends JFrame7.implements ActionListener
16、8.private JRadioButtonMenuItem red,green,blue;9.private JMenuItem openItem,newItem,exitItem,codeItem,typeItem;10.private JMenu setting;11.private Container c;12./建構子13.public Ch09_02()14.super(JMenuBar元件範例);15.c=getContentPane();16.c.setBackground(Color.white);17.JMenuBar jmb=new JMenuBar();18.setJM
17、enuBar(jmb);2022/12/2020範例2:建立Menu(2/5)建立第一個File的enu:19.JMenu file=new JMenu(檔案(F);20.file.setMnemonic(KeyEvent.VK_F);21.openItem=new JMenuItem(新增(N),KeyEvent.VK_N);22.newItem=new JMenuItem(開啟(O),KeyEvent.VK_O);23.exitItem=new JMenuItem(關閉(X),KeyEvent.VK_X);24.setting=new JMenu(參數設定);25.codeItem=new
18、 JMenuItem(編碼);26.typeItem=new JMenuItem(字型);27.28.openItem.addActionListener(this);29.newItem.addActionListener(this);30.exitItem.addActionListener(this);31.codeItem.addActionListener(this);32.typeItem.addActionListener(this);33.34.file.add(openItem);35.file.add(newItem);36.setting.add(codeItem);37
19、.setting.add(typeItem);38.file.add(setting);39.file.addSeparator();/分隔線40.file.add(exitItem);41.jmb.add(file);/新增file選單2022/12/2021範例2:建立Menu(3/5)建立第二個Menu:42.JMenu choice=new JMenu(選項(C);43.choice.setMnemonic(KeyEvent.VK_C);44.JCheckBoxMenuItem check;45.check=new JCheckBoxMenuItem(切換);46.check.addA
20、ctionListener(this);47.choice.add(check);48.ButtonGroup buttongroup=new ButtonGroup();49.red=new JRadioButtonMenuItem(紅色);50.choice.add(red);51.buttongroup.add(red);52.red.addActionListener(this);53.green=new JRadioButtonMenuItem(綠色);54.choice.add(green);55.buttongroup.add(green);56.green.addActionL
21、istener(this);57.blue=new JRadioButtonMenuItem(藍色);58.choice.add(blue);59.buttongroup.add(blue);60.blue.addActionListener(this);61.jmb.add(choice);62.2022/12/2022範例2:建立Menu(4/5)實作事件處理方法:63.public void actionPerformed(ActionEvent evt)64.65.if(evt.getSource()=exitItem)66.System.exit(0);67.if(evt.getSo
22、urce()=red)68.c.setBackground(Color.red);69.if(evt.getSource()=green)70.c.setBackground(Color.green);71.if(evt.getSource()=blue)72.c.setBackground(Color.blue);73.repaint();/重繪74.2022/12/2023範例2:建立Menu(5/5)主程式76.public static void main(String args)77./建立Swing應用程式78.Ch09_02 app=new Ch09_02();79./關閉視窗事
23、件,結束程式的執行80.app.addWindowListener(new WindowAdapter()81.public void windowClosing(WindowEvent evt)82.System.exit(0);83.);84.app.setSize(300,200);/設定尺寸85.app.setVisible(true);/顯示視窗86.87.2022/12/2024JToolBar工具列元件-說明 JToolBar工具列元件繼承自JComponent類別,可以建立視窗的工具列按鈕,它也屬於一種容器元件,在建立好JToolBar物件後,就可以新增GUI元件到工具列,如下
24、圖所示:2022/12/2025JToolBar工具列元件-建立物件 程式碼在建立好JToolBar元件後,使用add()方法新增GUI元件,最後只需將JToolBar元件視為GUI元件,新增到最上層容器物件即可。JToolBar toolBar=new JToolBar();blue=new JButton(new ImageIcon(blue1.gif);yellow=new JButton(new ImageIcon(yellow1.gif);green=new JButton(new ImageIcon(green1.gif);toolBar.add(blue);toolBar.add
25、(yellow);toolBar.add(green);2022/12/2026範例3:建立toolbar(1/2)宣告及toolbar建立:1./*程式範例:Ch09_03.java*/2.import javax.swing.*;3.import java.awt.*;4.import java.awt.event.*;5./繼承JFrame類別,實作ActionListener介面6.public class Ch09_03 extends JFrame implements ActionListener7.private JButton blue,yellow,green;8.priv
26、ate Container c;9./建構子10.public Ch09_03()11.super(JToolBar元件範例);12.c=getContentPane();13.c.setBackground(Color.white);14.JToolBar toolBar=new JToolBar();15.blue=new JButton(new ImageIcon(blue.jpg);16.blue.setToolTipText(藍色);17.blue.addActionListener(this);18.yellow=new JButton(new ImageIcon(yellow.j
27、pg);19.yellow.setToolTipText(黃色);20.yellow.addActionListener(this);21.green=new JButton(new ImageIcon(green.jpg);22.green.setToolTipText(綠色);23.green.addActionListener(this);24.toolBar.add(blue);25.toolBar.add(yellow);26.toolBar.add(green);27.c.add(toolBar,BorderLayout.NORTH);28.2022/12/2027範例3:建立to
28、olbar(2/2)實作事件處理方法及主程式:29.public void actionPerformed(ActionEvent evt)30.if(evt.getSource()=blue)31.c.setBackground(Color.blue);32.if(evt.getSource()=yellow)33.c.setBackground(Color.yellow);34.if(evt.getSource()=green)35.c.setBackground(Color.green);36.repaint();/重繪37.38./主程式39.public static void ma
29、in(String args)40./建立Swing應用程式41.Ch09_03 app=new Ch09_03();42./關閉視窗事件,結束程式的執行43.app.addWindowListener(new WindowAdapter()44.public void windowClosing(WindowEvent evt)45.System.exit(0);46.);47.app.setSize(300,200);/設定尺寸48.app.setVisible(true);/顯示視窗49.50.2022/12/2028檔案與色彩選擇元件-說明 Swing套件擁有瀏覽檔案系統選取檔案或資料
30、夾的JFileChooser和選取色彩的JColorChooser元件2種選擇元件,這2個元件都是繼承自JComponent,其繼承架構如下圖所示:2022/12/2029JFileChooser檔案選擇元件-說明 JFileChooser檔案選擇元件可以顯示對話方塊瀏覽檔案系統,以便讓使用者選取檔案或資料夾。2022/12/2030JFileChooser檔案選擇元件-開啟檔案對話方塊 例如:開啟或儲存指定檔案,如下所示:JFileChooser jfc=new JFileChooser();上述程式碼建立JFileChooser物件後,使用showOpenDialog()方法顯示開啟檔案對
31、話方塊,如下所示:int n=jfc.showOpenDialog(Ch11_4_1.this);if(n=JFileChooser.APPROVE_OPTION)File file=jfc.getSelectedFile();2022/12/2031JFileChooser檔案選擇元件-儲存檔案對話方塊 儲存檔案對話方塊是使用showSaveDialog()方法來顯示,如下所示:int m=jfc.showSaveDialog(Ch11_4_1.this);if(m=JFileChooser.APPROVE_OPTION)File file=jfc.getSelectedFile();202
32、2/12/2032範例4:使用FileChooser元件(1/3)基本宣告:1./*程式範例:Ch09_04.java*/2.import java.io.*;3.import java.awt.*;4.import java.awt.event.*;5.import javax.swing.*;6.import javax.swing.filechooser.*;7./繼承JFrame類別8.public class Ch09_04 extends JFrame9./建構子10.public Ch09_04()11.super(JFileChooser元件範例);12.Container c
33、=getContentPane();13./建立擁有捲動軸的文字區域元件14.final JTextArea area=new JTextArea(15,30);15.JScrollPane scroll=new JScrollPane(area);16./建立JFileChooser元件17.final JFileChooser jfc=new JFileChooser();18.JPanel button=new JPanel();/按鈕的JPanel2022/12/2033範例4:使用FileChooser元件(2/3)新增兩個按鈕及傾聽者及事件處理方法:1.JButton open=n
34、ew JButton(開啟檔案);2.open.addActionListener(new ActionListener()3.public void actionPerformed(ActionEvent evt)4.int n=jfc.showOpenDialog(Ch09_04.this);5.if(n=JFileChooser.APPROVE_OPTION)6.File file=jfc.getSelectedFile();7.area.append(開啟檔案名稱:);8.area.append(file.getName()+n);9.10.11.);12.button.add(ope
35、n);13./建立儲存檔案按鈕14.JButton save=new JButton(儲存檔案);15.save.addActionListener(new ActionListener()16.public void actionPerformed(ActionEvent evt)17.int m=jfc.showSaveDialog(Ch09_04.this);18.if(m=JFileChooser.APPROVE_OPTION)19.File file=jfc.getSelectedFile();20.area.append(儲存檔案名稱:);21.area.append(file.g
36、etName()+n);22.23.24.);25.button.add(save);26.c.add(scroll,BorderLayout.CENTER);27.c.add(button,BorderLayout.SOUTH);28.2022/12/2034練習 參考範例,範例,範例建立一個類似筆記本畫面的視窗2022/12/2035範例4:使用FileChooser元件(3/3)主程式:29.public static void main(String args)30./建立Swing應用程式31.Ch09_04 app=new Ch09_04();32./關閉視窗事件,結束程式的執行3
37、3.app.addWindowListener(new WindowAdapter()34.public void windowClosing(WindowEvent evt)35.System.exit(0);36.);37.app.setSize(300,200);/設定尺寸38.app.setVisible(true);/顯示視窗39.40.2022/12/2036JColorChooser色彩選擇元件-說明 JColorChooser色彩選擇元件提供多種標籤和調色盤的色彩選擇對話方塊,如果Java應用程式需要讓使用者選擇色彩,就可以使用JColorChooser元件,如右圖所示:202
38、2/12/2037JColorChooser色彩選擇元件-建立物件 JColorChooser色彩選擇元件的建立,如下所示:JColorChooser jcc=new JColorChooser();程式碼建立JColorChooser物件後,使用showDialog()方法顯示色彩選擇對話方塊,如下所示:Color newColor=jcc.showDialog(Ch11_4_2.this,選擇背景色彩,c.getBackground();if(newColor!=null)c.setBackground(newColor);2022/12/2038多重視窗介面JInternalFrame-
39、說明 一般來說,視窗應用程式都不會只有一個視窗,如果需要在JFrame視窗開啟其它視窗,就可以使用JInternalFrame類別在JFrame視窗內建立多重視窗。其繼承架構如下圖所示:2022/12/2039多重視窗介面JInternalFrame-JDesktopPane和JLayeredPane類別 JInternalFrame物件是新增在JDesktopPane物件(在使用上如同JFrame的ContentPane),所以需要先建立JDesktopPane物件,如下所示:JDesktopPane jdesktop=new JDesktopPane();上述程式碼建立JDesktopPa
40、ne物件後,JInternalFrame物件就是新增到此容器物件,因為JDesktopPane是JLayeredPane的子類別,所以能夠建立多個重疊的內層視窗。2022/12/2040多重視窗介面JInternalFrame-JInternalFrame類別(說明)JInternalFrame類別 在JInternalFrame類別部分,筆者準備直接繼承JInternalFrame建立InternalFrame類別。2022/12/2041多重視窗介面JInternalFrame-JInternalFrame類別(範例)class InternalFrame extends JInterna
41、lFrame static int iframeCount=0;static final int offsetX=25;static final int offsetY=25;public InternalFrame()super(內層視窗:+(+iframeCount),true,/可調整尺寸 true,/可關閉 true,/可最大化 true);/可縮小成圖示 setSize(300,200);/設定尺寸 /設定位置 setLocation(offsetX*iframeCount,offsetY*iframeCount);2022/12/2042多重視窗介面JInternalFrame-J
42、InternalFrame類別(createInternalFrame()方法)private void createInternalFrame()InternalFrame iframe=new InternalFrame();iframe.setVisible(true);/顯示內層視窗 jdesktop.add(iframe);/加入上層視窗 try iframe.setSelected(true);catch(java.beans.PropertyVetoException e)Ch22_Main.javaimport javax.swing.*;import java.awt.*;i
43、mport java.awt.event.*;class Ch22_Main public static void main(String args)Ch22_Win_09 w=new Ch22_Win_09();w.setSize(300,250);w.setVisible(true);w.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);Ch22_Win_09.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;class Ch22_Win_09
44、extends JFrame implements ActionListener Container c=getContentPane();GridLayout gl=new GridLayout(2,1);JPanel up_panel=new JPanel();JPanel down_panel=new JPanel();JLabel l1=new JLabel(結果);JTextField tf1=new JTextField(15);JButton b=new JButton10;JButton badd=new JButton(+);JButton bequal=new JButto
45、n(=);static boolean clear=true;static int result=0;Ch22_Win_09()super(計算機);c.setBackground(Color.green);c.setLayout(gl);up_panel.setBackground(Color.red);down_panel.setBackground(Color.yellow);up_panel.add(l1);up_panel.add(tf1);for(int i=0;i 10;i+)bi=new JButton(+i);bi.addActionListener(this);down_p
46、anel.add(bi);badd.addActionListener(this);bequal.addActionListener(this);down_panel.add(badd);down_panel.add(bequal);c.add(up_panel);c.add(down_panel);public void actionPerformed(ActionEvent e)String temp_tf1;for(int i=0;i 10;i+)if(e.getSource()=bi)if(clear)tf1.setText(+i);else tf1.setText(tf1.getText()+i);clear=false;if(e.getSource()=badd)clear=true;result=result+Integer.parseInt(tf1.getText();tf1.setText(+result);if(e.getSource()=bequal)clear=true;result=result+Integer.parseInt(tf1.getText();tf1.setText(+result);