910 likes | 987 Views
記事本. 物件導向系統實務. 建立記事本的 5 步驟. 建立視窗並加上文字區 加上選單功能表 為選單功能表上的選項加上聽者和動作. 建立視窗並加上文字區. JTextArea 文字區域元件 - 說明. JTextArea 文字區域元件能夠輸入或顯示多行文字內容,使用” <br>” 、” <br>” 或” ” 符號換行(需視作業系統而定),如下圖所示:. JTextArea 文字區域元件 - 說明. JTextArea 文字區域元件使用” <br>” 、” <br>” 或” ” 符號換行(需視作業系統而定),如下所示:
E N D
記事本 物件導向系統實務
建立記事本的5步驟 • 建立視窗並加上文字區 • 加上選單功能表 • 為選單功能表上的選項加上聽者和動作
JTextArea文字區域元件-說明 • JTextArea文字區域元件能夠輸入或顯示多行文字內容,使用”\n”、”\n\r”或”\r”符號換行(需視作業系統而定),如下圖所示:
JTextArea文字區域元件-說明 • JTextArea文字區域元件使用”\n”、”\n\r”或”\r”符號換行(需視作業系統而定),如下所示: JTextArea area = new JTextArea("等待輸入資料...\n", 15, 30); JScrollPane scroll = new JScrollPane(area); • 上述程式碼建立指定初始字串、寬和高的JTextArea物件,因為文字區域需要捲動,所以使用JScrollPane容器元件替文字區域加上捲動軸。
建構子: JTextArea() JTextArea(String) JTextField(int, int) JTextField(String, int, int) 方法: void append(String) void insert(String, int) void replaceRange(String, int, int) String getText() void setFont(Font) void setRows(int) void setColumns(int) int getColumns() int getLineCount() void setLineWrap(boolean) boolean getLineWrap() void setTabSize(int) int getTabSize() JTextArea建構子和方法
Step1: 視窗設計並加上文字區 主程式 視窗程式 class NoteBook extends JFrame { private Container c; private JPanel panel; private JTextArea textArea; private JScrollPane sp; NoteBook(String title) { super(title); c = getContentPane(); panel = new JPanel(); panel.setLayout(new BorderLayout()); //設定文字框 textArea = new JTextArea(); //設定文字過長時自動折行 textArea.setLineWrap(true); //加上捲軸 sp = new JScrollPane(textArea); //將文字框及捲軸加到視窗上 panel.add(sp, BorderLayout.CENTER); c.add(panel); } } • import java.awt.*; • import java.awt.event.*; • import javax.swing.*; • import java.io.*; • class MyNote • { • public static void main(String [] args) • { • NoteBook nb = new NoteBook("記事本"); • nb.setSize(500,500); • nb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); • nb.setVisible(true); • } • }
Menu屬MenuComponent的延伸類別 • 以「記事本」為例說明選單及其相關元件 11
Menu屬MenuComponent的延伸類別 • Menu位於視窗標題列的下方 • 使用選單時,框架(Frame)會有一個選單列(MenuBar),選單列內有數個選單(Menu) • 每個Menu內會有多個選項(MenuItem)或核選式選項(CheckboxMenuItem),選單是選項的容器 • 選單也可以是另一個選單的容器 12
JMenuBar、JMenu與JMenuItem下拉式選單元件-說明 • 在JFrame、JInternalFrame、JApplet和JDialog等類別的視窗新增下拉式功能表選單,類別建構子需要使用JMenuBar、JMenu和JMenuItem物件來建立下拉式功能表的物件。
JMenuBar、JMenu與JMenuItem下拉式選單元件-JMenuBar元件JMenuBar、JMenu與JMenuItem下拉式選單元件-JMenuBar元件 • JMenuBar元件是視窗上方的功能表列,如下所示: JMenuBar jmb = new JMenuBar(); setJMenuBar(jmb); • 上述程式碼建立JMenuBar物件後,預設是空的功能表列,然後使用setJMenuBar()方法新增到JFrame視窗,換句話說,目前在視窗上方已經擁有一個空的功能表列。
JMenuBar、JMenu與JMenuItem下拉式選單元件-JMenu元件JMenuBar、JMenu與JMenuItem下拉式選單元件-JMenu元件 • 在建立好JMenuBar物件後,就可以新增功能表列下拉式子選單的JMenu物件,如下所示: JMenu file = new JMenu("檔案(F)"); JMenuItem item; file.add(item = new JMenuItem("新增(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);
JMenuBar、JMenu與JMenuItem下拉式選單元件-Item元件 JMenuItem、JCheckBoxMenuItem與JRadioButtonMenuItem元件 • JMenuItem、JCheckBoxMenuItem與JRadioButtonMenuItem類別的建構子可以新增選單的選項、核取方塊和選項鈕選項。
class NoteBook extends JFrame • { • private Container c; • private JPanel panel; • private JTextArea textArea; • private JScrollPane sp; • private JMenuBar mb; • NoteBook(String title) • { • super(title); • c = getContentPane(); • panel = new JPanel(); • panel.setLayout(new BorderLayout()); • //加上選單功能表 • mb = new JMenuBar(); • //建立選單功能表的第一個檔案選單 • JMenu fileMenu = new JMenu("檔案"); • //建立檔案選單下的選項 • JMenuItem newFile = new JMenuItem("開新檔案"); • JMenuItem oldFile = new JMenuItem("開啟舊檔"); • JMenuItem saveFile = new JMenuItem("儲存檔案"); • JMenuItem exitNote = new JMenuItem("離開"); • //將選項加到檔案中 • fileMenu.add(newFile); • fileMenu.add(oldFile); • fileMenu.add(saveFile); • //加一條分隔線 • fileMenu.addSeparator(); • fileMenu.add(exitNote); • //將檔案選單加到功能表上 • mb.add(fileMenu); • //將選單功能表加到視窗上 • panel.add(mb, BorderLayout.NORTH); • //設定文字框 • textArea = new JTextArea(); • //設定文字過長時自動折行 • textArea.setLineWrap(true); • //加上捲軸 • sp = new JScrollPane(textArea); • //將文字框及捲軸加到視窗上 • panel.add(sp, BorderLayout.CENTER); • c.add(panel); • } • }
為新增的選單項目加上LISTENER和相對應的動作(先處理開新檔和離開的動作)為新增的選單項目加上LISTENER和相對應的動作(先處理開新檔和離開的動作)
class NoteBook extends JFrame • { private Container c; • private JPanel panel; • private JTextArea textArea; • private JScrollPane sp; • private JMenuBar mb; • NoteBook(String title) • { super(title); • c = getContentPane(); • panel = new JPanel(); • panel.setLayout(new BorderLayout()); • //加上選單功能表 • mb = new JMenuBar(); • //建立選單功能表的第一個檔案選單 • JMenu fileMenu = new JMenu("檔案"); • //建立檔案選單下的選項 • JMenuItem newFile = new JMenuItem("開新檔案"); • JMenuItem oldFile = new JMenuItem("開啟舊檔"); • JMenuItem saveFile = new JMenuItem("儲存檔案"); • JMenuItem exitNote = new JMenuItem("離開");
//為開新檔案加上Listener和動作,動作是將文字區域清為空字串"//為開新檔案加上Listener和動作,動作是將文字區域清為空字串" • newFile.addActionListener(new ActionListener() • { public void actionPerformed(ActionEvent a) • { textArea.setText(""); • } • } ); • //為開啟舊檔加上Listener和動作, 動作要搭配FileChooser,暫不作 • oldFile.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.setText("開啟舊檔還不能使用"); • } • } ); • //為儲存檔案加上Listener和動作, 動作要搭配FileChooser,暫不作 • saveFile.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.setText("儲存檔案還不能使用"); • } • } ); • //為離開加上Listener和動作, 動作要搭配FileChooser,暫不作 • exitNote.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { System.exit(0); • } • } );
//將選項加到檔案中 • fileMenu.add(newFile); • fileMenu.add(oldFile); • fileMenu.add(saveFile); • //加一條分隔線 • fileMenu.addSeparator(); • fileMenu.add(exitNote); • //將檔案選單加到功能表上 • mb.add(fileMenu); • //將選單功能表加到視窗上 • panel.add(mb, BorderLayout.NORTH); • //設定文字框 • textArea = new JTextArea(); • //設定文字過長時自動折行 • textArea.setLineWrap(true); • //加上捲軸 • sp = new JScrollPane(textArea); • //將文字框及捲軸加到視窗上 • panel.add(sp, BorderLayout.CENTER); • c.add(panel); • } • }
練習:加上另一個編輯選單(含剪下,複製,貼上) 練習:加上另一個編輯選單(含剪下,複製,貼上)
import java.awt.*; • import java.awt.event.*; • import javax.swing.*; • import java.io.*; • class MyNote • { • public static void main(String [] args) • { • NoteBook nb = new NoteBook("記事本"); • nb.setSize(500,500); • nb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); • nb.setVisible(true); • } • } • class NoteBook extends JFrame • { • private Container c; • private JPanel panel; • private JTextArea textArea; • private JScrollPane sp; • private JMenuBar mb; • NoteBook(String title) • { • super(title); • c = getContentPane(); • panel = new JPanel(); • panel.setLayout(new BorderLayout()); • //加上選單功能表 • mb = new JMenuBar(); • //建立選單功能表的第一個檔案選單 • JMenu fileMenu = new JMenu("檔案"); • //建立檔案選單下的選項 • JMenuItem newFile = new JMenuItem("開新檔案"); • JMenuItem oldFile = new JMenuItem("開啟舊檔"); • JMenuItem saveFile = new JMenuItem("儲存檔案"); • JMenuItem exitNote = new JMenuItem("離開"); • //為開新檔案加上Listener和動作,動作是將文字區域清為空字串" • newFile.addActionListener(new ActionListener() • { public void actionPerformed(ActionEvent a) • { textArea.setText(""); • } • } );
//為開啟舊檔加上Listener和動作, 動作要搭配FileChooser,暫不作 • oldFile.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.setText("開啟舊檔還不能使用"); • } • } ); • //為儲存檔案加上Listener和動作, 動作要搭配FileChooser,暫不作 • saveFile.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.setText("儲存檔案還不能使用"); • } • } ); • //為離開加上Listener和動作, 動作要搭配FileChooser,暫不作 • exitNote.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { System.exit(0); • } • } ); • //將選項加到檔案中 • fileMenu.add(newFile); • fileMenu.add(oldFile); • fileMenu.add(saveFile); • //加一條分隔線 • fileMenu.addSeparator(); • fileMenu.add(exitNote); • //將檔案選單加到功能表上 • mb.add(fileMenu);
//建立選單功能表的第二個編輯選單 • JMenu editMenu = new JMenu("編輯"); • //建立編輯選單下的選項 • JMenuItem cutEdit = new JMenuItem("剪下"); • JMenuItem copyEdit = new JMenuItem("複製"); • JMenuItem pasteEdit = new JMenuItem("貼上"); • //為剪下加上Listener和動作,動作是將文字區域中被選的文字剪掉" • cutEdit.addActionListener(new ActionListener() • { public void actionPerformed(ActionEvent a) • { textArea.cut(); • } • } ); • //為複製加上Listener和動作 • copyEdit.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.copy(); • } • } ); • //為貼上加上Listener和動作 • pasteEdit.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.paste(); • } • } ); • //將選項加到編輯中 • editMenu.add(cutEdit); • editMenu.add(copyEdit); • editMenu.add(pasteEdit); • //將編輯選單加到功能表上 • mb.add(editMenu);
//將選單功能表加到視窗上 • panel.add(mb, BorderLayout.NORTH); • //設定文字框 • textArea = new JTextArea(); • //設定文字過長時自動折行 • textArea.setLineWrap(true); • //加上捲軸 • sp = new JScrollPane(textArea); • //將文字框及捲軸加到視窗上 • panel.add(sp, BorderLayout.CENTER); • c.add(panel); • } • }
import java.awt.*; • import java.awt.event.*; • import javax.swing.*; • import java.io.*; • class MyNote • { public static void main(String [] args) • { NoteBook nb = new NoteBook("記事本"); • nb.setSize(500,500); • nb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); • nb.setVisible(true); • } • } • class NoteBook extends JFrame • { private Container c; • private JPanel panel; • private JTextArea textArea; • private JScrollPane sp; • private JMenuBar mb; • NoteBook(String title) • { super(title);
c = getContentPane(); • panel = new JPanel(); • panel.setLayout(new BorderLayout()); • //加上選單功能表 • mb = new JMenuBar(); • //建立選單功能表的第一個檔案選單 • JMenu fileMenu = new JMenu("檔案(F)"); • fileMenu.setMnemonic(KeyEvent.VK_F); • //建立檔案選單下的選項 • JMenuItem newFile = new JMenuItem("開新檔案(N)", KeyEvent.VK_N); • JMenuItem oldFile = new JMenuItem("開啟舊檔(O)", KeyEvent.VK_O); • JMenuItem saveFile = new JMenuItem("儲存檔案(S)", KeyEvent.VK_S); • JMenuItem exitNote = new JMenuItem("離開(X)", KeyEvent.VK_X); • //為開新檔案加上Listener和動作,動作是將文字區域清為空字串" • newFile.addActionListener(new ActionListener() • { public void actionPerformed(ActionEvent a) • { textArea.setText(""); • } • } ); • //為開啟舊檔加上Listener和動作, 動作要搭配FileChooser,暫不作 • oldFile.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.setText("開啟舊檔還不能使用"); • } • } );
//為儲存檔案加上Listener和動作, 動作要搭配FileChooser,暫不作 • saveFile.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.setText("儲存檔案還不能使用"); • } • } ); • //為離開加上Listener和動作, 動作要搭配FileChooser,暫不作 • exitNote.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { System.exit(0); • } • } ); • //將選項加到檔案中 • fileMenu.add(newFile); • fileMenu.add(oldFile); • fileMenu.add(saveFile); • //加一條分隔線 • fileMenu.addSeparator(); • fileMenu.add(exitNote); • //將檔案選單加到功能表上 • mb.add(fileMenu);
//建立選單功能表的第二個編輯選單 • JMenu editMenu = new JMenu("編輯(E)"); • editMenu.setMnemonic(KeyEvent.VK_E); • //建立編輯選單下的選項 • JMenuItem cutEdit = new JMenuItem("剪下(U)", KeyEvent.VK_U); • JMenuItem copyEdit = new JMenuItem("複製(C)", KeyEvent.VK_C); • JMenuItem pasteEdit = new JMenuItem("貼上(P)", KeyEvent.VK_P); • //為剪下加上Listener和動作,動作是將文字區域中被選的文字剪掉" • cutEdit.addActionListener(new ActionListener() • { public void actionPerformed(ActionEvent a) • { textArea.cut(); • } • } ); • //為複製加上Listener和動作 • copyEdit.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.copy(); • } • } ); • //為貼上加上Listener和動作 • pasteEdit.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.paste(); • } • } );
//將選項加到編輯中 • editMenu.add(cutEdit); • editMenu.add(copyEdit); • editMenu.add(pasteEdit); • //將編輯選單加到功能表上 • mb.add(editMenu); • //將選單功能表加到視窗上 • panel.add(mb, BorderLayout.NORTH); • //設定文字框 • textArea = new JTextArea(); • //設定文字過長時自動折行 • textArea.setLineWrap(true); • //加上捲軸 • sp = new JScrollPane(textArea); • //將文字框及捲軸加到視窗上 • panel.add(sp, BorderLayout.CENTER); • c.add(panel); • } • }
加入CHECKBOXMENUITEM和RADIOBUTTONMENUITEM等樣式的選單項目加入CHECKBOXMENUITEM和RADIOBUTTONMENUITEM等樣式的選單項目
import java.awt.event.*; • import javax.swing.*; • import java.io.*; • class MyNote • { • public static void main(String [] args) • { • NoteBook nb = new NoteBook("記事本"); • nb.setSize(500,500); • nb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); • nb.setVisible(true); • } • } • class NoteBook extends JFrame • { • private Container c; • private JPanel panel; • private JTextArea textArea; • private JScrollPane sp; • private JMenuBar mb; • private int bold = Font.PLAIN; • private int italic = Font.PLAIN; • private int fonts = 12;
NoteBook(String title) • { • super(title); • c = getContentPane(); • panel = new JPanel(); • panel.setLayout(new BorderLayout()); • //加上選單功能表 • mb = new JMenuBar(); • //建立選單功能表的第一個檔案選單 • JMenu fileMenu = new JMenu("檔案(F)"); • fileMenu.setMnemonic(KeyEvent.VK_F); • //建立檔案選單下的選項 • JMenuItem newFile = new JMenuItem("開新檔案(N)", KeyEvent.VK_N); • JMenuItem oldFile = new JMenuItem("開啟舊檔(O)", KeyEvent.VK_O); • JMenuItem saveFile = new JMenuItem("儲存檔案(S)", KeyEvent.VK_S); • JMenuItem exitNote = new JMenuItem("離開(X)", KeyEvent.VK_X); • //為開新檔案加上Listener和動作,動作是將文字區域清為空字串" • newFile.addActionListener(new ActionListener() • { public void actionPerformed(ActionEvent a) • { textArea.setText(""); • } • } ); • //為開啟舊檔加上Listener和動作, 動作要搭配FileChooser,暫不作 • oldFile.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.setText("開啟舊檔還不能使用"); • } • } );
//為儲存檔案加上Listener和動作, 動作要搭配FileChooser,暫不作 • saveFile.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.setText("儲存檔案還不能使用"); • } • } ); • //為離開加上Listener和動作, 動作要搭配FileChooser,暫不作 • exitNote.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { System.exit(0); • } • } ); • //將選項加到檔案中 • fileMenu.add(newFile); • fileMenu.add(oldFile); • fileMenu.add(saveFile); • //加一條分隔線 • fileMenu.addSeparator(); • fileMenu.add(exitNote); • //將檔案選單加到功能表上 • mb.add(fileMenu); • //建立選單功能表的第二個編輯選單 • JMenu editMenu = new JMenu("編輯(E)"); • editMenu.setMnemonic(KeyEvent.VK_E); • //建立編輯選單下的選項 • JMenuItem cutEdit = new JMenuItem("剪下(U)", KeyEvent.VK_U); • JMenuItem copyEdit = new JMenuItem("複製(C)", KeyEvent.VK_C); • JMenuItem pasteEdit = new JMenuItem("貼上(P)", KeyEvent.VK_P); • JMenuItem selectAllEdit = new JMenuItem("全選(A)", KeyEvent.VK_A);
//為剪下加上Listener和動作,動作是將文字區域中被選的文字剪掉"//為剪下加上Listener和動作,動作是將文字區域中被選的文字剪掉" • cutEdit.addActionListener(new ActionListener() • { public void actionPerformed(ActionEvent a) • { textArea.cut(); • } • } ); • //為複製加上Listener和動作 • copyEdit.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.copy(); • } • } ); • //為貼上加上Listener和動作 • pasteEdit.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.paste(); • } • } ); • //為全選加上Listener和動作 • selectAllEdit.addActionListener(new ActionListener () • { public void actionPerformed(ActionEvent a) • { textArea.selectAll(); • } • } ); • //將選項加到編輯中 • editMenu.add(cutEdit); • editMenu.add(copyEdit); • editMenu.add(pasteEdit); • editMenu.add(selectAllEdit); • //將編輯選單加到功能表上 • mb.add(editMenu);
//建立選單功能表的第三個字型選單 • JMenu fontMenu = new JMenu("字型(T)"); • fontMenu.setMnemonic(KeyEvent.VK_T); • //建立字型選單下的選項 • JCheckBoxMenuItem boldCheck = new JCheckBoxMenuItem("粗體字"); • JCheckBoxMenuItem italicCheck = new JCheckBoxMenuItem("斜體字"); • ButtonGroup fontsGroup = new ButtonGroup(); • JRadioButtonMenuItem smallFonts = new JRadioButtonMenuItem("10號"); • JRadioButtonMenuItem midFonts = new JRadioButtonMenuItem("12號"); • JRadioButtonMenuItem bigFonts = new JRadioButtonMenuItem("14號"); • //為粗體字加上Listener和動作 • boldCheck.addItemListener(new ItemListener() • { public void itemStateChanged(ItemEvent a) • { if(a.getStateChange() == ItemEvent.SELECTED) • bold = Font.BOLD; • else • bold = Font.PLAIN; • textArea.setFont(new Font("", bold+italic, fonts)); • textArea.repaint(); • } • } ); • //為斜體加上Listener和動作 • italicCheck.addItemListener(new ItemListener() • { public void itemStateChanged(ItemEvent a) • { if(a.getStateChange() == ItemEvent.SELECTED) • italic = Font.ITALIC; • else • italic = Font.PLAIN; • textArea.setFont(new Font("", bold+italic, fonts)); • textArea.repaint(); • } • } );
//為10號字型大小加上Listener和動作 • smallFonts.addItemListener(new ItemListener() • { public void itemStateChanged(ItemEvent a) • { if(a.getStateChange() == ItemEvent.SELECTED) • fonts= 10; • textArea.setFont(new Font("", bold+italic, fonts)); • textArea.repaint(); • } • } ); • //為12號字型大小加上Listener和動作 • midFonts.addItemListener(new ItemListener() • { public void itemStateChanged(ItemEvent a) • { if(a.getStateChange() == ItemEvent.SELECTED) • fonts= 12; • textArea.setFont(new Font("", bold+italic, fonts)); • textArea.repaint(); • } • } ); • //為14號字型大小加上Listener和動作 • bigFonts.addItemListener(new ItemListener() • { public void itemStateChanged(ItemEvent a) • { if(a.getStateChange() == ItemEvent.SELECTED) • fonts= 14; • textArea.setFont(new Font("", bold+italic, fonts)); • textArea.repaint(); • } • } ); • //將字型大小選項加到group中 • fontsGroup.add(smallFonts); • fontsGroup.add(midFonts); • fontsGroup.add(bigFonts);
//將所有字型選項加到字型選單 • fontMenu.add(boldCheck); • fontMenu.add(italicCheck); • fontMenu.addSeparator(); • fontMenu.add(smallFonts); • fontMenu.add(midFonts); • fontMenu.add(bigFonts); • //將字型選單加到功能表上 • mb.add(fontMenu); • //將選單功能表加到視窗上 • panel.add(mb, BorderLayout.NORTH); • //設定文字框 • textArea = new JTextArea(); • //設定字型 • textArea.setFont(new Font("Serif", Font.PLAIN, 12)); • //設定文字過長時自動折行 • textArea.setLineWrap(true); • //加上捲軸 • sp = new JScrollPane(textArea); • //將文字框及捲軸加到視窗上 • panel.add(sp, BorderLayout.CENTER); • c.add(panel); • } • }
JPopupMenu彈出式選單元件-說明 • JPopupMenu彈出式選單元件繼承自JComponent,可以建立視窗應用程式滑鼠右鍵顯示的快顯功能表,內含選項的JMenuItem物件或JSeparator分隔線物件,如下圖所示:
JPopupMenu彈出式選單元件-建立物件 • 在建立JPopupMenu物件後,使用add()方法新增選項的JMenuItem物件,addSeparator()方法可以新增選單分隔線的JSeparator物件。 popup = new JPopupMenu(); popup.add(blue = new JMenuItem("藍色")); popup.add(yellow = new JMenuItem("黃色")); popup.add(green = new JMenuItem("綠色")); popup.addSeparator(); popup.add("紅色");
JPopupMenu彈出式選單元件-事件處理 • 新增MouseListener傾聽者物件且實作mousePressed()和mouseReleased()方法來顯示彈出式視窗,如下所示: public void mousePressed(MouseEvent evt) { if (evt.isPopupTrigger()) popup.show(evt.getComponent(), evt.getX(), evt.getY()); } public void mouseReleased(MouseEvent evt) { if (evt.isPopupTrigger()) popup.show(evt.getComponent(), evt.getX(), evt.getY()); }
建構子: JPopupMenu() JPopupMenu(String):參數String是標題文字 方法: JMenuItem add(JMenuItem) JMenuItem add(String) void addSeparator() void insert(Component, int) void remove(JMenuItem) void remove(int) void removeAll() void show(Component, int, int) JPopupMenu建構子與方法
範例1:使用PopupMenu(1/4) • 建立Popup Menu的選擇項: • import javax.swing.*; • import java.awt.*; • import java.awt.event.*; • // 繼承JFrame類別, 實作ActionListener介面 • public class Ch09_01 extends JFrame • implements ActionListener • { private JPopupMenu popup; • private JMenuItem blue, yellow, green; • private Container c; • // 建構子 • public Ch09_01() • { super("JPopupMenu元件範例"); • c = getContentPane(); • c.setBackground(Color.pink); • popup = new JPopupMenu(); • popup.add(blue = new JMenuItem("藍色")); • blue.addActionListener(this); • popup.add(yellow = new JMenuItem("黃色")); • yellow.addActionListener(this); • popup.add(green = new JMenuItem("綠色")); • green.addActionListener(this); • popup.addSeparator(); • popup.add("紅色"); // 使用字串新增選項