Bài giảng Bài 7: Cải tiến chương trình đồ họa liệt kê các số nguyên tố bao gồm những nội dung về việc thêm các thực đơn, chọn các kiểu giao diện khác nhau của Swing, quản lí các ngoại lệ và một số nội dung khác.
Trang 1Bài 7: Cải tiến chương trình đồ họa
liệt kê các số nguyên tố
Lê Hồng Phương
phuonglh@gmail.com
Khoa Toán-Cơ-Tin học Trường Đại học Khoa học Tự nhiên Hà Nội
Trang 2Nội dung
● Nâng cấp chương trình liệt kê các số nguyên tố trong bài giảng trước:
– Quản lí các ngoại lệ
Trang 3Các thành phần đồ họa
● Sử dụng thêm các thành phần đồ họa:
– JMenuBar
– JMenu
– JMenuItem
– JRadioButtonMenuItem
– JSeparator
– JOptionPane
● Sử dụng thêm các lớp tiện ích:
– ButtonGroup, SwingUtilities, UIManager
Trang 4Chương trình
● Thêm các thực đơn File, Look and Feel, Help.
● Thực đơn File có mục Exit
– Cho phép thoát chương trình
– Tương tự như nhấn chuột vào nút đóng cửa sổ.
● Thực đơn Look and Feel:
– Có các kiểu giao diện khác nhau nằm trong các nút chọn Người dùng chọn kiểu nào thì giao diện được trình bày theo kiểu đó.
● Thực đơn Help chứa mục About.
Trang 5Các kiểu giao diện
● Java hỗ trợ nhiều kiểu giao diện đồ họa khác nhau,
gọi là các Look and Feel – LnF.
– Motif
Trang 6Các kiểu giao diện
kiểu LnF nào:
public class LookAndFeelLister {
public static void main(String[] args) {
try {
for (LookAndFeelInfo info :
UIManager.getInstalledLookAndFeels()) {
System.out.println(info.getClassName());
} } catch (Exception e) {
e.printStackTrace();
} }
} javax.swing.plaf.metal.MetalLookAndFeel
com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel com.sun.java.swing.plaf.motif.MotifLookAndFeel com.sun.java.swing.plaf.gtk.GTKLookAndFeel
Trang 7Các kiểu giao diện
Trang 8Chương trình
Thông báo lỗi khi người dùng nhập dữ liệu sai
Khi người dùng chọn mục
Help > About
JOptionPane.showMessageDialog(PrimeNumberFrame.this ,
"A program for listing prime numbers" , "About" , JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(PrimeNumberFrame.this ,
"Number format error!" , "Error" ,
JOptionPane.ERROR_MESSAGE);
Trang 9Chương trình: PrimeNumberFrame
// create a menu bar containing some menus
JMenuBar menuBar = new JMenuBar();
//
// add the menu bar to the frame
setJMenuBar(menuBar);
Viết trong hàm tạo khi xây dựng
cửa sổ chương trình
Trang 10Chương trình: PrimeNumberFrame
// File menu
JMenu menu = new JMenu( "File" );
menu.setMnemonic(KeyEvent.VK_F);
JMenuItem exitMenuItem = new JMenuItem( "Exit" );
exitMenuItem.setMnemonic(KeyEvent.VK_X);
exitMenuItem.addActionListener( new ExitActionListener());
menu.add(exitMenuItem);
menuBar.add(menu);
class ExitActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
}
Đặt phím tắt Alt+F
Trang 11Chương trình: PrimeNumberFrame
// Look and Feel menu
menu = new JMenu( "Look and Feel" );
menu.setMnemonic(KeyEvent.VK_L);
ButtonGroup group = new ButtonGroup();
// Meta LnF
JRadioButtonMenuItem menuItem = new JRadioButtonMenuItem( "Meta" );
menuItem.setMnemonic(KeyEvent.VK_M);
ActionListener lookAndFeelActionListener = new
ChooseLookAndFeelActionListener(
"javax.swing.plaf.metal.MetalLookAndFeel" );
menuItem.addActionListener(lookAndFeelActionListener);
group.add(menuItem);
menu.add(menuItem);
Các nút nằm trong cùng nhóm thì chỉ chọn được một tại một thời điểm
Trang 12Chương trình: PrimeNumberFrame
// Nimbus LnF (Java 6, update 10)
menuItem = new JRadioButtonMenuItem( "Nimbus" );
menuItem.setMnemonic(KeyEvent.VK_N);
lookAndFeelActionListener = new
ChooseLookAndFeelActionListener(
"com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel" );
menuItem.addActionListener(lookAndFeelActionListener);
group.add(menuItem);
menu.add(menuItem);
Trang 13Chương trình: PrimeNumberFrame
class ChooseLookAndFeelActionListener implements ActionListener {
private String name ;
public ChooseLookAndFeelActionListener(String name) {
this name = name;
}
@Override
public void actionPerformed(ActionEvent e) {
try {
UIManager.setLookAndFeel(name );
} catch (ClassNotFoundException exp) {
exp.printStackTrace();
} catch (InstantiationException exp) {
exp.printStackTrace();
} catch (IllegalAccessException exp) {
exp.printStackTrace();
} catch (UnsupportedLookAndFeelException exp) {
exp.printStackTrace();
}
SwingUtilities.updateComponentTreeUI(PrimeNumberFrame.this );
Đặt giao diện mới
Cập nhật giao diện
Trang 14Các thành phần đồ họa thực đơn
Object Component Container JComponent
JMenuBar JPopupMenu JAbstractButton JSeparator
JMenuItem JMenu JCheckboxMenuItem JRadioButtonMenuItem
Trang 15Chương trình
– LookAndFeelLister.java