Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 37 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
37
Dung lượng
1,61 MB
Nội dung
BÀI 4: LẬP TRÌNH GIAO DIỆN VỚI SWING NÂNG CAO Học xong người học sẽ: - Tiếp tục phát triển tổ chức giao diện người dùng đồ họa với control khác - Lập trình tùy biến đối tượng GUI dạng danh sách như: JCheckBox, JRadio, JComboBox, Jlist - Các control nâng cao khác: JTable, JColorChoose, JTabedPane, JSlider - Thiết kế Menu: MenuBar, Menu, MenuItem, PopupMenu, Toolbar - Thiết kế giao diện người dùng với control nâng cao công cụ trực quan NetBeans IDE Kỹ tự tìm hiểu sử dụng GUI component khác có sẵn thư viện - 4.1 CÁC CONTROL DANH SÁCH 4.1.1 JCheckBox Lớp JCheckBox trình triển khai checkbox, item mà lựa chọn (selected) không lựa chọn (unselected), Người dùng chọn lúc nhiều lựa chọn Hình 4.1 Minh họa JCheckbox Khai báo cho lớp: public class JCheckBox extends JToggleButton implements Accessible Các constructor lớp JcheckBox: - JCheckBox(): Tạo unselected checkbox ban đầu khơng có text icon - JCheckBox(Action a): Tạo checkbox, với thuộc tính lấy từ Action - JCheckBox(Icon icon): Tạo unselected checkbox với icon ThS Dương Thành Phết http://www.thayphet.net Trang 89 - JCheckBox(Icon icon, boolean selected): Tạo checkbox với icon xác định ban đầu selected khơng - JCheckBox(String text): Tạo unselected checkbox ban đầu với text - JCheckBox(String text, boolean selected): Tạo checkbox với text xác định ban đầu selected không - JCheckBox(String text, Icon icon): Tạo unselected checkbox ban đầu với text icon cho - JCheckBox(String text, Icon icon, boolean selected): Tạo checkbox với text icon, xác định ban đầu selected không Các phương thức quan trọng JcheckBox là: Tên phương thức Mô tả Trả true JCheckBox chọn boolean isSelected() ngược lại setSelected(boolean state) Thiết lập chọn bỏ chọn getAccessibleContext() Lấy AccessibleContext liên kết với JCheckBox isBorderPaintedFlat() Lấy giá trị thuộc tính borderPaintedFlat paramString() Trả biểu diễn chuỗi JCheckBox updateUI() Phục hồi thuộc tính UI giá trị từ L&F Bảng 4.1: Các phương thức JcheckBox Chương trình ví dụ lớp JCheckBox: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JCheckboxDemo { private JFrame mainFrame; private JLabel headerLabel; private JLabel statusLabel; private JPanel controlPanel; public JCheckboxDemo(){ prepareGUI(); } public static void main(String[] args){ JCheckboxDemo swingControlDemo = new JCheckboxDemo(); swingControlDemo.showCheckBoxDemo(); } private void prepareGUI(){ mainFrame = new JFrame("Vi du JCheckbox"); mainFrame.setSize(400,200); mainFrame.setLayout(new GridLayout(3, 1)); ThS Dương Thành Phết http://www.thayphet.net Trang 90 headerLabel = new JLabel("", JLabel.CENTER); statusLabel = new JLabel("",JLabel.CENTER); statusLabel.setSize(350,100); controlPanel = new JPanel(); controlPanel.setLayout(new FlowLayout()); mainFrame.add(headerLabel); mainFrame.add(controlPanel); mainFrame.add(statusLabel); mainFrame.setVisible(true); } private void showCheckBoxDemo(){ headerLabel.setText("Control in action: CheckBox"); final JCheckBox chkApple = new JCheckBox("Apple"); final JCheckBox chkMango = new JCheckBox("Mango"); final JCheckBox chkPeer = new JCheckBox("Peer"); chkApple.setMnemonic(KeyEvent.VK_C); chkMango.setMnemonic(KeyEvent.VK_M); chkPeer.setMnemonic(KeyEvent.VK_P); chkApple.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { statusLabel.setText("Apple Checkbox: " + (e.getStateChange()==1? "checked":"unchecked")); } }); chkMango.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { statusLabel.setText("Mango Checkbox: " + (e.getStateChange()==1? "checked":"unchecked")); } }); chkPeer.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { statusLabel.setText("Peer Checkbox: " + (e.getStateChange()==1? "checked":"unchecked")); } }); controlPanel.add(chkApple); controlPanel.add(chkMango); controlPanel.add(chkPeer); mainFrame.setVisible(true); } } ThS Dương Thành Phết http://www.thayphet.net Trang 91 Kết quả: Hình 4.2 Kết minh họa JCheckbox Tạo JCheckbox NetBeans: Hình 4.3 Màn hình thiết kế Jcheckbox Netbeans 4.1.2 JRadioButton Lớp JRadioButton trình triển khai radio button, item mà lựa chọn không, thời điểm cho phép chọn Khi tạo nhiều JRadioButton, phải kết hợp với Button Group để ràng buộc thao tác chọn người dùng (tại thời điểm có JRadioButton chọn) Cú pháp khai báo cho lớp javax.swing.JRadioButton: public class JradioButton extends JtoggleButton implements Accessible Các constructor sử dụng phổ biến lớp JRadioButton: - JRadioButton(): Tạo unselected radiobutton khơng có text - JRadioButton(String s): Tạo unselected radiobutton với text cho - JRadioButton(String s, boolean selected): Tạo radiobutton với text cho trạng thái selected Các phương thức lớp JradioButton Tên phương thức getAccessibleContext() ThS Dương Thành Phết Mô tả Lấy AccessibleContext http://www.thayphet.net liên kết với Trang 92 JRadioButton getUIClassID() Trả tên lớp L&F mà truyền thành phần paramString() Trả biểu diễn chuỗi JRadioButton updateUI() Phục hồi thuộc tính UI giá trị từ L&F Bảng 4.2: Các phương thức JRadioButton Chương trình ví dụ lớp JRadioButton import javax.swing.*; public class JRadioButtonDemo { JFrame f; JRadioButtonDemo(){ f=new JFrame("Vi du JRadioButton Demo"); JRadioButton r1=new JRadioButton("A) Male"); JRadioButton r2=new JRadioButton("B) FeMale"); r1.setBounds(50,20,100,50); r2.setBounds(50,50,100,50); ButtonGroup bg=new ButtonGroup(); bg.add(r1);bg.add(r2); f.add(r1);f.add(r2); f.setSize(300,150); f.setLayout(null); f.setVisible(true); } public static void main(String[] args) { new JRadioButtonDemo(); } } Kết quả: Hình 4.3 Kết minh họa JRadioButton Tạo JRadioButton NetBeans: ThS Dương Thành Phết http://www.thayphet.net Trang 93 Hình 4.4 Màn hình thiết kế JRadioButton Netbeans 4.1.3 RadioButtonGroup Lớp ButtonGroup sử dụng để nhóm nhiều lớp lại với nhau, để thời điểm, có nút lựa chọn Ví dụ: import javax.swing.*; import java.awt.event.*; class JRadioButtonGroupDemo extends JFrame implements ActionListener{ JRadioButton rb1,rb2; JButton b; JRadioButtonGroupDemo(){ rb1=new JRadioButton("Male"); rb1.setBounds(100,20,100,30); rb2=new JRadioButton("FeMale"); rb2.setBounds(100,50,100,30); ButtonGroup bg=new ButtonGroup(); bg.add(rb1); bg.add(rb2); b=new JButton("click"); b.setBounds(100,100,80,30); b.addActionListener(this); add(rb1); add(rb2); add(b); setSize(300,200); setLayout(null); setVisible(true); setTitle("Vi du JRadioButton Group Demo"); } public void actionPerformed(ActionEvent e){ if(rb1.isSelected()){ JOptionPane.showMessageDialog(this,"Ban la male"); ThS Dương Thành Phết http://www.thayphet.net Trang 94 } if(rb2.isSelected()){ JOptionPane.showMessageDialog(this,"Ban la female"); } } public static void main(String args[]){ new JRadioButtonGroupDemo(); } } Kết quả: Hình 4.5 Kết minh họa JRadioButton Gắn JRadioButton vào Button Group: Hình 4.6: Minh họa gắn Button Group 4.1.4 JComboBox JComboBox thành phần cho phép người dùng lựa chọn từ danh sách thả xuống (dropdown list) Lớp JComboBox thành phần mà kết hợp button, trường chỉnh sửa drop-down list Tại thời điểm có item lựa chọn từ list Cú pháp khai báo cho lớp javax.swing.JComboBox là: public class JComboBox extends JComponent implements ItemSelectable, ListDataListener, ActionListener, Accessible Các constructor lớp JcomboBox: - JComboBox(): Tạo JComboBox với data model mặc định ThS Dương Thành Phết http://www.thayphet.net Trang 95 - JComboBox(Object[] items): Tạo JComboBox mà chứa phần tử mảng cho - JComboBox(Vector items): Tạo JComboBox mà chứa phần tử Vector cho Các phương thức lớp JcomboBox: Tên phương thức addItem(Object anObject) removeItem(Object anObject) removeAllItems() Mô tả Thêm item tới list Để xóa item từ list Để xóa tất item từ list Xác định xem có hay không JComboBox setEditable(boolean b) editable addActionListener(ActionListener a) Để thêm ActionListener addItemListener(ItemListener i) Để thêm ItemListener Bảng 4.3: Các phương thức JComboBox Chương trình minh họa lớp JcomboBox: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JComboBoxDemo { private JFrame mainFrame; private JLabel headerLabel; private JLabel statusLabel; private JPanel controlPanel; public JComboBoxDemo(){ prepareGUI(); } public static void main(String[] args){ JComboBoxDemo swingControlDemo = new JComboBoxDemo(); swingControlDemo.showComboboxDemo(); } private void prepareGUI(){ mainFrame = new JFrame("JComboBox Demo"); mainFrame.setSize(300,200); mainFrame.setLayout(new GridLayout(3, 1)); mainFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent windowEvent){ System.exit(0); } }); headerLabel = new JLabel("", JLabel.CENTER); statusLabel = new JLabel("",JLabel.CENTER); ThS Dương Thành Phết http://www.thayphet.net Trang 96 statusLabel.setSize(250,50); controlPanel = new JPanel(); controlPanel.setLayout(new FlowLayout()); mainFrame.add(headerLabel); mainFrame.add(controlPanel); mainFrame.add(statusLabel); mainFrame.setVisible(true); } private void showComboboxDemo(){ headerLabel.setText("Control in action: JComboBox"); final DefaultComboBoxModel fruitsName = new DefaultComboBoxModel(); fruitsName.addElement("Apple"); fruitsName.addElement("Grapes"); fruitsName.addElement("Mango"); fruitsName.addElement("Peer"); final JComboBox fruitCombo = new JComboBox(fruitsName); fruitCombo.setSelectedIndex(0); JScrollPane fruitListScrollPane = new JScrollPane(fruitCombo); JButton showButton = new JButton("Show"); showButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String data = ""; if (fruitCombo.getSelectedIndex() != -1) { data = "Fruits Selected: " + fruitCombo.getItemAt (fruitCombo.getSelectedIndex()); } statusLabel.setText(data); } }); controlPanel.add(fruitListScrollPane); controlPanel.add(showButton); mainFrame.setVisible(true); } } Kết quả: Hình 4.7: Kết mih họa JComboBox ThS Dương Thành Phết http://www.thayphet.net Trang 97 Tạo JCombobox NetBeans: Hình 4.8: Minh họa thiết kế JCombobox NetBeans Kết thu sau chạy ứng dụng: Hình 4.9: Kết thiết kế JButton 4.1.5 Jlist JList control cho phép chứa nhiều item, item hiển thị thành nhiều cột Người sử dụng chọn nhiều item JList (Singleselection vs multiple-selection) Một ListModel trì nội dung list Hình 4.10: Minh họa JList ThS Dương Thành Phết http://www.thayphet.net Trang 98 Chương trình minh họa lớp JSlider: import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class JSliderDemo { private JFrame mainFrame; private JLabel headerLabel; private JLabel statusLabel; private JPanel controlPanel; public JSliderDemo(){ prepareGUI(); } public static void main(String[] args){ JSliderDemo swingControlDemo = new JSliderDemo(); swingControlDemo.showSliderDemo(); } private void prepareGUI(){ mainFrame = new JFrame("JSlider Demo"); mainFrame.setSize(400,200); mainFrame.setLayout(new GridLayout(3, 1)); mainFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent windowEvent){ System.exit(0); } }); headerLabel = new JLabel("", JLabel.CENTER); statusLabel = new JLabel("",JLabel.CENTER); statusLabel.setSize(350,100); controlPanel = new JPanel(); controlPanel.setLayout(new FlowLayout()); mainFrame.add(headerLabel); mainFrame.add(controlPanel); mainFrame.add(statusLabel); mainFrame.setVisible(true); } private void showSliderDemo(){ headerLabel.setText("Control in action: JSlider"); JSlider slider= new JSlider(JSlider.HORIZONTAL,0,100,10); slider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { statusLabel.setText("Value : " + ((JSlider)e.getSource()).getValue()); } ThS Dương Thành Phết http://www.thayphet.net Trang 111 }); controlPanel.add(slider); mainFrame.setVisible(true); } } Kết quả: Hình 4.21: Kết minh họa JSlider 4.3 Menu Java Swing Menu java swing hệ thống menu cung cấp menu (Menu Bar) bên tiêu đề cửa sổ Thanh menu chứa nhiều item gọi Menu Khi click vào menu, hiển thị lựa chọn khác gọi Menu Item Khi click phải (right-click), Menu chứa Menu Item xuất bên cạnh nơi mà click chuột gọi Popup Menu Hình bên ví dụ Menu java swing Hình 4.21: Minh họa giao diện Menu 4.3.1 JMenuBar JMenuBar sử dụng để tạo menu Một menu chứa nhiều item, ví dụ File, Edit, View, … ThS Dương Thành Phết http://www.thayphet.net Trang 112 Lớp JMenuBar cung cấp trình triển khai trình đơn (menu bar) Dưới cú pháp khai báo cho lớp javax.swing.JMenuBar: Public class JMenuBar extends JComponent implements Accessible, MenuElement 4.3.2 JMenu JMenu class sử dụng để tạo menu menu Khi click vào JMenu, hiển thị nhiều item Để thêm JMenu vào JMenuBar, sử dụng phương thức add() lớp JMenuBar Cú pháp khai báo cho lớp javax.swing.JMenu là: public class JMenu extends JMenuItem implements Accessible, MenuElement Các constructor lớp JMenu - JMenu(): Xây dựng JMenu khơng có text - JMenu(Action a): Xây dựng menu có thuộc tính nhận từ Action cho - JMenu(String s): Xây dựng JMenu với chuỗi s cho (như text nó) - JMenu(String s, boolean b): Xây dựng JMenu với chuỗi s cho (như text nó) giá trị boolean để xác định có hay không tear-off menu 4.3.3 JMenuItem JMenuItem sử dụng để tạo item gắn vào JMenu Khi người dùng click vào menu item, phát sinh kiện performed Cú pháp khai báo cho lớp javax.swing.JMenuItem là: public class JMenuItem extends AbstractButton Accessible, MenuElement Lớp JMenuItem gồm constructor sau: - JMenuItem(): Tạo JMenuItem khơng có text icon - JMenuItem(Action a): Tạo JMenuItem có thuộc tính nhận từ Action cho - JMenuItem(Icon icon): Tạo JMenuItem với icon cho - JMenuItem(String text): Tạo JMenuItem với text cho - JMenuItem(String text, Icon icon): Tạo JMenuItem với text icon cho - JMenuItem(String text, int mnemonic): Tạo JMenuItem với text cho mnemonic 4.3.4 JCheckboxMenuItem ThS Dương Thành Phết http://www.thayphet.net Trang 113 Lớp JCheckboxMenuItem biểu diễn checkbox mà có menu Việc lựa chọn checkbox menu làm thay đổi trạng thái điều khiển từ on thành off ngược lại Cú pháp khai báo cho lớp javax.swing.JCheckboxMenuItem là: public class JCheckBoxMenuItem extends JMenuItem implements SwingConstants, Accessible Lớp JCheckboxMenuItem gồm constructor sau: - JCheckboxMenuItem(): Tạo checkbox ban đầu dạng unselected khơng có text icon - JCheckboxMenuItem(Action a): Tạo menu item có thuộc tính lấy từ Action cho - JCheckboxMenuItem(Icon icon): Tạo checkbox ban đầu dạng unselected với icon cho - JCheckboxMenuItem(String text): Tạo checkbox ban đầu dạng unselected với text cho - JCheckboxMenuItem(String text, boolean b): Tạo checkbox ban đầu dạng unselected với text trạng thái selection cho - JCheckboxMenuItem(String text, Icon icon): Tạo checkbox ban đầu dạng unselected với text icon cho - JCheckboxMenuItem(String text, Icon icon, boolean b): Tạo checkbox ban đầu dạng unselected với text, icon trạng thái selection cho 4.3.5 JRadioButtonMenuItem Lớp JRadioButtonMenuItem biểu diễn mục RadioButton có menu Việc lựa chọn RadioButton menu làm thay đổi trạng thái điều khiển từ on thành off từ off thành on Cú pháp khai báo cho lớp javax.swing.JRadioButtonMenuItem là: public class JRadioButtonMenuItem extends JMenuItem implements Accessible Lớp JRadioButtonMenuItem gồm constructor sau: - JRadioButtonMenuItem(): Tạo JRadioButtonMenuItem khơng có text icon - JRadioButtonMenuItem(Action a): Tạo radio button có thuộc tính lấy từ Action cho - JRadioButtonMenuItem(Icon icon): Tạo JRadioButtonMenuItem với icon - JRadioButtonMenuItem(Icon icon, boolean selected): ThS Dương Thành Phết http://www.thayphet.net Trang 114 Tạo JRadioButtonMenuItem với icon trạng thái lựa chọn selected cho, khơng có text - JRadioButtonMenuItem(String text): Tạo JRadioButtonMenuItem với text cho - JRadioButtonMenuItem(String text, boolean selected): Tạo JRadioButtonMenuItem với text trạng thái lựa chọn selected cho - JRadioButtonMenuItem(String text, Icon icon): Tạo JRadioButtonMenuItem với text icon cho - JRadioButtonMenuItem(String text, Icon icon, boolean selected): Tạo JRadioButtonMenuItem với text, icon trạng thái lựa chọn selected cho Chương trình minh họa tạo menu: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JMenuBarDemo { private JFrame mainFrame; private JLabel headerLabel; private JLabel statusLabel; private JPanel controlPanel; public JMenuBarDemo(){ prepareGUI(); } public static void main(String[] args){ JMenuBarDemo swingMenuDemo = new JMenuBarDemo(); swingMenuDemo.showMenuDemo(); } private void prepareGUI(){ mainFrame = new JFrame("JMenuBar Demo"); mainFrame.setSize(400,200); mainFrame.setLayout(new GridLayout(3, 1)); headerLabel = new JLabel("",JLabel.CENTER ); statusLabel = new JLabel("",JLabel.CENTER); statusLabel.setSize(350,100); mainFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent windowEvent){ System.exit(0); } }); controlPanel = new JPanel(); controlPanel.setLayout(new FlowLayout()); ThS Dương Thành Phết http://www.thayphet.net Trang 115 mainFrame.add(headerLabel); mainFrame.add(controlPanel); mainFrame.add(statusLabel); mainFrame.setVisible(true); } private void showMenuDemo(){ //Tao mot menu bar final JMenuBar menuBar = new JMenuBar(); //Tao cac menu JMenu fileMenu = new JMenu("File"); final JMenu aboutMenu = new JMenu("About"); //tao cac item JMenuItem openMenuItem = new JMenuItem("Open"); openMenuItem.setActionCommand("Open"); JMenuItem saveMenuItem = new JMenuItem("Save"); saveMenuItem.setActionCommand("Save"); JMenuItem exitMenuItem = new JMenuItem("Exit"); exitMenuItem.setActionCommand("Exit"); MenuItemListener menuItemListener = new MenuItemListener(); openMenuItem.addActionListener(menuItemListener); saveMenuItem.addActionListener(menuItemListener); exitMenuItem.addActionListener(menuItemListener); final JCheckBoxMenuItem showWindowMenu = new JCheckBoxMenuItem("Show About", true); showWindowMenu.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if(showWindowMenu.getState()){ menuBar.add(aboutMenu); }else{ menuBar.remove(aboutMenu); } } }); final JRadioButtonMenuItem showLinksMenu = new JRadioButtonMenuItem("Show Links", true); //Them item toi cac menu fileMenu.add(openMenuItem); fileMenu.add(saveMenuItem); fileMenu.addSeparator(); fileMenu.add(showWindowMenu); fileMenu.addSeparator(); fileMenu.add(showLinksMenu); fileMenu.addSeparator(); ThS Dương Thành Phết http://www.thayphet.net Trang 116 fileMenu.add(exitMenuItem); //Them menu toi menubar menuBar.add(fileMenu); menuBar.add(aboutMenu); //Them menubar toi frame mainFrame.setJMenuBar(menuBar); mainFrame.setVisible(true); } class MenuItemListener implements ActionListener { public void actionPerformed(ActionEvent e) { statusLabel.setText(e.getActionCommand() + " JMenuItem clicked."); } } } Kết quả: Hình 4.22: Kết minh họa giao diện JMenuBar Thiết kế MenuBar NetBeans: Hình 4.23: Minh họa thiết kế MenuBar NetBeans ThS Dương Thành Phết http://www.thayphet.net Trang 117 Lưu ý: Mặc định có Menu tạo File Edit Tạo menu vào MenuBar NetBeans: Hình 4.24: Minh họa thiết kế Menu vào MenuBar NetBeans Thay đổi text cho Menu: Hình 4.25: Minh họa điều chỉnh Text cho Menu NetBeans Tạo menu item NetBeans: Hình 4.26: Minh họa thiết kế MenuItem vào MenuBar NetBeans Tuỳ chỉnh menu item: ThS Dương Thành Phết http://www.thayphet.net Trang 118 Hình 4.27: Minh họa tùy chỉnh Menu Item NetBeans Lưu ý: Có thể tạo sub menu cách menu gắn thêm menu khác: Hình 4.28: Minh họa tạo Sub Mennu Item NetBeans Đăng ký kiện cho Menu item (Cách đăng ký thực tương tự Button) Hình 4.29: Minh họa đăng ký kiện cho Menu Item NetBeans 4.3.6 JPopup Menu JPopupMenu menu xuất người dùng right click vào container JFrame, JPanel, … Trong JPopupMenu chứa menu item cho phép người dùng lựa chọn Cú pháp khai báo cho lớp javax.swing.JPopupMenu là: ThS Dương Thành Phết http://www.thayphet.net Trang 119 public class JPopupMenu extends JComponent implements Accessible, MenuElement Lớp JPopupMenu gồm constructor sau: - JPopupMenu(): Xây dựng JPopupMenu khơng có "invoker" - JPopupMenu(String label): Xây dựng JPopupMenu với title cho Chương trình minh họa lớp JPopupMenu: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JPopupMenuDemo { private JFrame mainFrame; private JLabel headerLabel; private JLabel statusLabel; private JPanel controlPanel; public JPopupMenuDemo(){ prepareGUI(); } public static void main(String[] args){ JPopupMenuDemo swingMenuDemo = new JPopupMenuDemo(); swingMenuDemo.showPopupMenuDemo(); } private void prepareGUI(){ mainFrame = new JFrame("JPopupMenu Demo"); mainFrame.setSize(400,200); mainFrame.setLayout(new GridLayout(3, 1)); headerLabel = new JLabel("",JLabel.CENTER ); statusLabel = new JLabel("",JLabel.CENTER); statusLabel.setSize(350,100); mainFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent windowEvent){ System.exit(0); } }); controlPanel = new JPanel(); controlPanel.setLayout(new FlowLayout()); mainFrame.add(headerLabel); mainFrame.add(controlPanel); mainFrame.add(statusLabel); mainFrame.setVisible(true); } private void showPopupMenuDemo(){ final JPopupMenu editMenu = new JPopupMenu("Edit"); JMenuItem cutMenuItem = new JMenuItem("Cut"); ThS Dương Thành Phết http://www.thayphet.net Trang 120 cutMenuItem.setActionCommand("Cut"); JMenuItem copyMenuItem = new JMenuItem("Copy"); copyMenuItem.setActionCommand("Copy"); JMenuItem pasteMenuItem = new JMenuItem("Paste"); pasteMenuItem.setActionCommand("Paste"); MenuItemListener menuItemListener = new MenuItemListener(); cutMenuItem.addActionListener((ActionListener) menuItemListener); copyMenuItem.addActionListener((ActionListener) menuItemListener); pasteMenuItem.addActionListener((ActionListener) menuItemListener); editMenu.add(cutMenuItem); editMenu.add(copyMenuItem); editMenu.add(pasteMenuItem); mainFrame.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { editMenu.show(mainFrame, e.getX(), e.getY()); } }); mainFrame.add(editMenu); mainFrame.setVisible(true); } class MenuItemListener implements ActionListener { public void actionPerformed(ActionEvent e) { statusLabel.setText(e.getActionCommand() + " JMenuItem clicked."); } } } Kết quả: Hình 4.30: Kết minh họa JPopupMenu Tạo popup menu NetBeans: Hình 4.31: Màn hình thiết kết JPopupMenu ThS Dương Thành Phết http://www.thayphet.net Trang 121 Trong cửa sổ Navigator xuất JPopupMenu: Hình 4.32: Màn hình xuất JPopupMenu cửa sổ Navigator Thiết kế thành phần cho Popupmenu Hình 4.33: Màn hình chọn thiết kế thành phần cho PopupMenu Đăng ký xử lý kiện cho popup menu: Hình 4.34: Màn hình đăng ký kiện cho PopupMenu ThS Dương Thành Phết http://www.thayphet.net Trang 122 Viết xử lý cho phương thức formMouseReleased: private void formMouseReleased(java.awt.event.MouseEvent evt) { if(evt.isPopupTrigger()) { jPopupMenu2.show(this, evt.getX(), evt.getY()); } } Lưu ý: jPopupMenu2 tên JPopupMenu mà tạo trình thiết kế Khi chạy ứng dụng right click vào vị trí JFrame, thấy kết quả: Hình 4.35: Màn hình kết thực thi PopupMenu Ghi chú: Đăng ký kiện cho Menu item, thực tương tự Button 4.3.7 JToolBar JToolBar tương tự menu bar chứa nhiều JButton thành phần swing khác Hình bên cách tạo tool bar NetBeans Hình 4.36: Màn hình thiết kế JToolBar NetBeans Thiết lập icon cho button tool bar ThS Dương Thành Phết http://www.thayphet.net Trang 123 Hình 4.36: Màn hình thiết lập icon cho JToolBar NetBeans ThS Dương Thành Phết http://www.thayphet.net Trang 124 TÓM TẮT Trong học người học làm quen với kiến thức sau: Học xong người học sẽ: - Tiếp tục phát triển tổ chức giao diện người dùng đồ họa với control khác - Lập trình tùy biến đối tượng GUI dạng danh sách như: JCheckBox, JComboBox, JradioButton, JRadioButtonGroup, Jlist - Các control nâng cao khác: JTable, JColorChoose, JTabedPane, JSlider - Thiết kế Menu: JMenuBar, JMenu, JMenuItem, JPopupMenu, JToolbar - Thiết kế giao diện người dùng với control nâng cao công cụ trực quan NetBeans IDE - Kỹ tự tìm hiểu sử dụng GUI component khác có sẵn thư viện - Bài học thực minh họa 11 ứng dụng Demo - Hết Bài ThS Dương Thành Phết http://www.thayphet.net Trang 125