Thành ph n Men uầ

Một phần của tài liệu Bài giảng về Java (Trang 129)

L p JMenuBar cài đ t thanh th c đ n và trong đú cú th ch a cỏc th c đ n pull-down.ớ ặ ự ơ ể ứ ự ơ Cỏc JMenuBar đượ ạc t o ra đ g n vào m t c a s JFrame b ng m t l nh g i:ể ắ ộ ủ ổ ằ ộ ệ ọ

JMenuBar menuBar = new JMenuBar();

JFrame frm = new JFrame(“Day la mot Frame”);

frm.setJMenuBar(menuBar); // MenuBar này ch a cú ph n t nàoư ầ ử

Sau khi cú MenuBar, ta c n thờm vào đú cỏc JMenu là cỏc m c trờn thanh Menu, khiầ ụ người dựng ch n vào đú s s xu ng danh sỏch cỏc m c ch n khỏc.ọ ẽ ổ ố ụ ọ

JMenu file = new JMenu(“File”);

Ta đ t cho nú m t phớm t t, vớ d là ‘F’ đ khi n Alt + F thỡ JMenu này đặ ộ ắ ụ ể ấ ược kớch ho t:ạ

file.setMnemonic('F');

Sau đú thỡ thờm nú vào JMenuBar: menuBar.add(file);

Bõy g i là lỳc ta cài đ t cỏc m c ch n trong m t JMenu. Java dựng l p JMenuItem đ nhờ ặ ụ ọ ộ ớ ị nghĩa t ng m c c a th c đ n.ừ ụ ủ ự ơ

JMenuItem open = new JMenuItem(“Open”,’O’);

đõy ta đó g i m t constructor v i m t tham s là nhón c a m c ch n, m t tham s là

Ở ọ ộ ớ ộ ố ủ ụ ọ ộ ố

ký t phớm t t. Sau đú ta add vào JMenu:ự ắ file.add(open);

N u ta c n bi u di n cỏc dũng k ngang đ phõn tỏch cỏc m c ch n thỡ ta cú th g iế ầ ể ễ ẻ ể ụ ọ ể ọ phương th c addSeparator() c a m t đ i tứ ủ ộ ố ượng JMenu:

L p JPopUpMenu bi u di n cho th c đ n pop-up. Nh ng th c đ n này cú th xu tớ ể ễ ự ơ ữ ự ơ ể ấ hi n b t c v trớ nào trong c a s hi n t i.ệ ấ ứ ị ử ổ ệ ạ

L p JCheckBoxMenuItem ch a cỏc m c đớ ứ ụ ược ch n đ ki m tra trong cỏc m c th cọ ể ể ụ ự đ n.ơ

T o thanh trỡnh đ n: JMenuBar myMenubar = new JMenuBar();ạ ơ Đ t tr ng thỏi cho m i m c ch n s d ng enable() ho c disable():ặ ạ ỗ ụ ọ ử ụ ặ Vi d : openItem.enable();ụ //được ch nọ

openItem.disable(); //m m c ch nờ ụ ọ

Ta cú th dựng để ường phõn cỏch đ tỏch cỏc m c ch n:ể ụ ọ FileMenu.addSeparator();

T o m c ch n cú ch a menu con khỏc, ta t o m t menu bỡnh thạ ụ ọ ứ ạ ộ ường r i đ a vào ồ ư menu đó cú.

Vớ d :ụ

//t o m c ch n cú menu conạ ụ ọ

JMenu printItem = new JMenu("Print"); //t o cỏc m c ch n cho menu conạ ụ ọ printItem.add("Print preview"); printItem.add("to preview");

//đ a m c ch n cú menu con vào menu chớnhư ụ ọ FileMenu.add(printItem);

T o m t m c ch n cú kh năng đỏnh d u (check Item), m t d u ki m tra (check mark)ạ ộ ụ ọ ả ấ ộ ấ ể s hi n bờn trỏi m c ch n:ẽ ệ ụ ọ

M c đỏnh d u: CheckboxMenuItem Autosave = new CheckboxMenuItem("Auto save");ụ ấ FileMenu.add(Autosave);

Xỏc đ nh xem m c ch n Autosave đang tr ng thỏi nào, ta dựng: Autosave.getState();ị ụ ọ ở ạ Khi s d ng, đ m c ch n tử ụ ể ụ ọ ương tỏc và nh n đậ ược s ki n ta c n cài đ t giao di nự ệ ầ ặ ệ ActionListener và g n vào t ng m c ch n.ắ ừ ụ ọ

Sau đõy là m t vớ d xõy d ng m t JFrame v i thanh menu và cỏc m c ch n trong đúộ ụ ự ộ ớ ụ ọ cú cài đ t x lý cỏc s ki n.ặ ử ự ệ

import javax.swing.*; import java.awt.*; import java.awt.event.*;

class MenuBarSample extends JFrame { //Khai bao mot hop thoai

JOptionPane op = new JOptionPane(); // Khai bao mot thuc don pop-up JPopupMenu jp;

public MenuBarSample() {

// Lay ve doi tuong chua cua Frame hien tai Container pane = this.getContentPane(); // Dat kieu trinh bay

pane.setLayout(new FlowLayout(FlowLayout.LEADING)); // Khai bao mot thanh menu

JMenuBar menuBar= new JMenuBar(); // Khai bao muc File trong thanh menu

JMenu menuFile= new JMenu("File");menuBar.add(menuFile);

// Dat ky tu kich hoat tat cung Alt menuFile.setMnemonic('F');

// Khai bao mot muc chon voi phim tat O

JMenuItem fileOpen = new JMenuItem("Open",'O'); // Them muc chon vao muc File

menuFile.add(fileOpen);

// Them mot muc chon khac voi phim tat N menuFile.add(new JMenuItem("New",'N')); // Them dong ngan cach

menuFile.addSeparator();

// Them mot muc chon co ten Save menuFile.add("Save");

// Xu ly su kien chon muc Open

fileOpen.addActionListener( new ActionListener() {

public void actionPerformed(ActionEvent event) {

// Hien thi thong bao, getContentPane() de lay Container cua Frame op.showMessageDialog(getContentPane(),"Ban vua chon Open"); }

} );

// Xu ly su kien chon New

menuFile.getItem(1).addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {

op.showMessageDialog(getContentPane(),"Ban vua chon New"); }

} );

// Xu ly su kien chon Save

menuFile.getItem(3).addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {

op.showMessageDialog(getContentPane(),"Ban vua chon Save"); }

} );

// Khai bao mot muc chon kieu checkbox

JCheckBoxMenuItem chk = new JCheckBoxMenuItem("is editting"); // Them phan xu ly su kien chon hay khong chon cho no

chk.addActionListener( new ActionListener() {

public void actionPerformed(ActionEvent e) {

// Lay ve doi tuong nguon su kien va ep kieu

JCheckBoxMenuItem ck = (JCheckBoxMenuItem)e.getSource(); if (ck.isSelected())

//Neu duoc chon

op.showMessageDialog(getContentPane(),"Ban vua chon is editting"); else

// Neu khong duoc chon

op.showMessageDialog(getContentPane(),"Ban vua bo chon is editting"); }

} );

// Them muc chon checkbox vao menu File menuFile.add(chk);

// Dat thanh Menu cho Frame la doi tuong menuBar this.setJMenuBar(menuBar);

// Cap phat bo nho cho popup menu jp = new JPopupMenu("Popup"); jp.add("Create");

jp.addSeparator();

jp.add("New Document");

this.addMouseListener( new MouseAdapter() {

public void mouseClicked(MouseEvent e) {

if( (e.getModifiers() & InputEvent.BUTTON3_MASK)== InputEvent.BUTTON3_MASK) jp.show(getContentPane(),e.getX(),e.getY());

} }

); }

public static void main(String[] argvs) {

MenuBarSample m = new MenuBarSample(); m.setSize(300,400);

m.setVisible(true); }

}

V. B qu n lý cỏch trỡnh bày (Layout Manager)ộ

Dựng đ s p x p ch và đ nh v cho cỏc đ i tể ắ ế ỗ ị ị ố ượng GUI. Cú 5 cỏch trỡnh bày:

• FlowLayout: s p x p cỏc đ i tắ ế ố ượng t trỏi qua ph i và t trờn xu ng dừ ả ừ ố ưới. Cỏc đ i tố ượng gi nguyờn kớch thữ ước.

• GridLayout: t o m t khung lạ ộ ưới vụ hỡnh v i cỏc ụ b ng nhau, cỏc đ i tớ ằ ố ượng sẽ đ t v a kớch thặ ừ ước v i cỏc ụ đú.ớ

• BorderLayout: Cỏc đ i tố ượng được đ t theo đặ ường vi n c a khung ch a theoề ủ ứ cỏc c nh West, East, South, Nort và Center.ạ

• CardLayout: Cỏc đ i tố ượng được đ t v a v n v i khung ch a và n m ch ngặ ừ ặ ớ ứ ằ ồ lờn nhau nh cỏc lỏ bài.ư

• GridBadLayout: cỏc đ i tố ượng trong khung ch a cũng đứ ược đ a vào cỏc ụ c aư ủ m t khung lộ ưới vụ hỡnh, kớch thước cỏc đ i tố ượng khụng nh t thi t ph i v aấ ế ả ừ m t ụ.ộ

Mu n ỏp d ng ta t o ra đ i tố ụ ạ ố ượng trờn r i chuy n nú cho khung ch a.ồ ể ứ Vớ du: FlowLayout objectsLayout = new FlowLayout();

myWindow.setLayout(objectsLayout); hay cú th vi t g n h n:ể ế ọ ơ

myWindow.setLayout(new FlowLayout());

V.1 Cỏch trỡnh bày FlowLayout:

T o đ i tạ ố ượng FlowLayout, ta s d ng phử ụ ương th c: public FlowLayout();ứ

ho c ch đ nh luụn cỏch căn l b ng phặ ỉ ị ề ằ ương th c kh i t o: public FlowLayout(intứ ở ạ align);

align là FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER ho c ch ra kho ng cỏcặ ỉ ả gi a cỏc đ i tữ ố ượng trờn cựng m t hàng: public FlowLayout(int align, int hgap, int vgap); ộ

V.2 Cỏch trỡnh bày GridLayout:

Phương th c kh i t o: public GridLayout(int Rows, int Cols);ứ ở ạ Vớ d :ụ GridLayout layout = new GridLayout(3, 2);

Xỏc đ nh kho ng cỏch gi a cỏc đ i tị ả ữ ố ượng qu n lý:ả public GridLayout(int Rows, int Cols, int hgap, int vgap);

V.3 Cỏch trỡnh bày BorderLayout

Đ i tố ượng được đ t theo đặ ường vi n khung ch a, theo cỏc c nh c a khung.ề ứ ạ ủ T o b qu n lý ki u BorderLayout:ạ ộ ả ể public BorderLayout();

Vớ d :ụ myWindow.setLayout(new BorderLayout());

Khi đ a đ i tư ố ượng vào khung ch a, ta ph i đ nh hỡnh trứ ả ị ước đ i tố ượng đú đ t đõu:ặ ở myWindow.add("North", new Button("on Top"));

cú 5 ki u: "North", "South", "West", "East", "Center".ể

VI. Cỏc h p tho iộ

VI.1 H p tho i thụng bỏoộ

Khi c n đ a ra thụng bỏo hay h i ngầ ư ỏ ười dựng m t v n đ gỡ đú và nh n v cõu tr l i,ộ ấ ề ậ ề ả ờ ta dựng h p tho i thụng bỏo. Java h tr l p JOptionPane đ ta th c hi n cụng vi c này.ộ ạ ỗ ợ ớ ể ự ệ ệ

L p JOptionPane cú 4 phớ ương th c tĩnh sau:ứ Tờn phương th cứ Giỏ tr trị ả

về í nghĩa

showMessageDialog Khụng cú Hi n th m t thụng bỏo và đ i n OKể ị ộ ợ ấ

showConfirmDialog S intố Hi n th thụng bỏo và đ i xỏc nh n Ok hay Cancelể ị ợ ậ showOptionDialog S intố Hi n th thụng bỏo và nh n v tr l i t m t danh sỏchể ị ậ ề ả ờ ừ ộ

ch nọ

icon hi n th ph thu c vào lo i thụng bỏo:ể ị ụ ộ ạ ERROR_MESSAGE : Thụng bỏo l iỗ INFORMATION_MESSAGE : Thụng tin WARNING_MESSAGE :C nh bỏoả QUESTION_MESSAGE: H iỏ PLAIN_MESSAGE: Gi i thớchả

Cỏc h ng s này đằ ố ược truy c p qua JOptionPane.ậ Vớ d :ụ

int selection = JOptionPane.showConfirmDialog(parent, "Message", "Title", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);

if (selection == JOptionPane.OK_OPTION) . . .

VI.2 H p tho i ch n Fileộ

Khi vi t ng d ng ta g p cỏc tỡnh hu ng m file đ đ c ho c ghi. Swing h tr m tế ứ ụ ặ ố ở ể ọ ặ ỗ ợ ộ l p JFileChooser đ ta th c hi n cụng vi c này. Hai phớ ể ự ệ ệ ương th c quan tr ng là:ứ ọ

- showOpenDialog: Đ hi n th h p tho i ch n m fileể ệ ị ộ ạ ọ ở - showSaveDialog: Đ hi n th h p tho i ch n ghi fileể ệ ị ộ ạ ọ Sau đõy là cỏc bước đ làm vi c v i h p tho i ch n file:ể ệ ớ ộ ạ ọ

1- T o m t đ i tạ ộ ố ượng JFileChooser: JFileChooser chooser = new JFileChooser(); 2- Đ t th m c cho h p tho i: chooser.setCurrentDirectory(new File("."));ặ ư ụ ộ ạ

3- N u đ nh ch n trế ị ọ ước m t file, cú th đ t: chooser.setSelectedFile(newộ ể ặ File(filename));

4- Đ cho phộp ch n nhi u file: chooser.setMultiSelectionEnabled(true);ể ọ ề

5- N u mu n gi i h n ki u file, dựng b l c file. Đ dựng đế ố ớ ạ ể ộ ọ ể ược b l c file ta ph iộ ọ ả thi t k m t l p k th a t l p javax.swing.filechooser.FileFilter. Vớ d b l c file Gif:ế ế ộ ớ ế ừ ừ ớ ụ ộ ọ

public class GifFilter extends FileFilter {

public boolean accept(File f) {

return f.getName().toLowerCase().endsWith(".gif") || f.isDirectory(); }

public String getDescription() {

return "GIF Image"; }

}

Sau đú gỏn cho h p tho i: chooser.setFileFilter(new GifFilter());ộ ạ

6- M c đ nh thỡ ch cho phộp ch n file, n u mu n cho phộp ch n th m c dựng phặ ị ỉ ọ ế ố ọ ư ụ ương th c: setFileSelectionMode() v i cỏc tham s : JFileChooser.DIRECTORIES_ONLY ho cứ ớ ố ặ JFileChooser.FILES_AND_DIRECTORIES.

7- Hi n th h p tho i b ng l nh g i:ể ị ộ ạ ằ ệ ọ

int result = chooser.showOpenDialog(parent); ho cặ

int result = chooser.showSaveDialog(parent);

Cỏc giỏ trị trả về là JFileChooser.APPROVE_OPTION,

JFileChooser.CANCEL_OPTION, or JFileChooser.ERROR_OPTION

8- L y vố file ho c cỏc file đấ ặ ược ch n dựng: getSelectedFile() ho c getSelectedFiles().ọ ặ Neus ch mu n l y tờn file thỡ ta dựng phỉ ố ấ ương th c getPath().ứ

String filename = chooser.getSelectedFile().getPath();

VI.3 H p tho i ch n màuộ

Swing h tr l p JColorChooser đ ngỗ ợ ớ ể ười dựng ch n màu. Cỳ phỏp s d ng nh sau:ọ ử ụ ư Color selectedColor = JColorChooser.showDialog(parent,title, initialColor);

Khi làm vi c v i h p tho i ch n màu ta c n cung cõp:ệ ớ ộ ạ ọ ầ - parent: m t companent cha; ộ

- title: Tiờu đ h p tho i; ề ộ ạ

- ch đ h p tho i modal hay modeless; ế ộ ộ ạ - m t đ i tộ ố ượng ch n màu ọ

- b l ng nghe cho nỳt b m Ok và Cancel.ộ ắ ấ chooser = new JColorChooser();

dialog = JColorChooser.createDialog(parent,"Background Color", false /* not modal */, chooser, new ActionListener() // L ng nghe cho OKắ

{

public void actionPerformed(ActionEvent event) {

setBackground(chooser.getColor()); }

},

null /* Khụng cú l ng nghe cho Cancel */);ắ

Bài t pậ

2. Hóy l p trỡnh đ x lý s ki n click chu t ph i lờn n n c a s s hi n m t menu Popup.ậ ể ử ự ệ ộ ả ề ủ ổ ẽ ệ ộ 3. Vi t chế ương trỡnh gi i phả ương trỡnh b c 2 v i giao di n GUI. Yờu c u chậ ớ ệ ầ ương trỡnh cú cỏc ụ nh p cỏc h s a, b, c và cho phộp xem k t qu . Trậ ệ ố ế ả ường h p khụng cú nghi m s hi n thợ ệ ẽ ể ị m t h p tho i thụng bỏo “chộ ộ ạ ương trỡnh vụ nghi m”.ệ

Đ tài 11. Threading

Java là ngụn ng thụng d ng duy nh t h tr cho l p trỡnh viờn cỏc gi i phỏp l p trỡnhữ ụ ấ ỗ ợ ậ ả ậ song song. L p trỡnh viờn xỏc đ nh s lậ ị ố ượng cỏc thread được ch y trong chạ ương trỡnh và chỳng được th c hi n song song v i nhau nh ng giai đo n nào. Kh năng này c a Java g i là tớnhự ệ ớ ở ữ ạ ả ủ ọ đa lu ng.ồ

I. Khỏi ni m threadệI.1 Khỏi ni m:ệ I.1 Khỏi ni m:ệ

Thread – lu ng ch m t đ n v chồ ỉ ộ ơ ị ương trỡnh cú th tỏch kh i cỏc ph n khỏc c aể ỏ ầ ủ chương trỡnh đ th c hi n song song v i cỏc ph n khỏc t ng kho ng th i gian ho c trongể ự ệ ớ ầ ở ừ ả ờ ặ toàn b quỏ trỡnh nú th c hi n. ộ ự ệ

Trong m i chỗ ương trỡnh Java, cú m t lu ng chớnh độ ồ ược b t đ u b ng vi c g i hàmắ ầ ằ ệ ọ main(), cỏc lu ng khỏc cú th phỏt sinh t lu ng chớnh này. Cỏc cõu l nh trong hàm main() n uồ ể ừ ồ ệ ế khụng được đ a vào m t lu ng riờng thỡ s đư ộ ồ ẽ ược th c hi n tu n t .ự ệ ầ ự

I.2. L p Threadớ

L p Thread trong gúi java.lang cú m t s constructor:ớ ộ ố Public Thread (<tờn thread>)

Public thread(): Khi này thread s cú tờn là Thread_1, Thread_2,….ẽ

Cỏc cụng vi c c a m t thread đệ ủ ộ ược đ t trong phặ ương th c run(). Phứ ương th c này cúứ th để ược khai bỏo ch ng trong l p khai bỏo k th a Thread ho c khai bỏo cài đ t giao di nồ ớ ế ừ ặ ặ ệ Runable.

Ngườ ậi l p trỡnh b t đ u m t thread b ng cỏc g i phắ ầ ộ ằ ọ ương th c start(), phứ ương th cứ start() sau đú s g i run(). Sau khi start() th c hi n xong, nú tr v đi u khi n cho chẽ ọ ự ệ ả ề ề ể ương trỡnh g i nú. Do đú, chọ ương trỡnh g i nú và thread đọ ược th c hi n m t cỏch đ ng th i.ự ệ ộ ồ ờ

• Phương th c start() s nộm ra m t ng o i l IllegalThreadStateException n uứ ẽ ộ ạ ệ ế thread c n b t đ u đó b t đ u r i.ầ ắ ầ ắ ầ ồ

• Phương th c tĩnh sleep c a Thread đứ ủ ược g i v i m t tham s xỏc đ nh r ngọ ớ ộ ố ị ằ m t thread đang ch y s d ng l i trong bao lõu theo đ n v ph n nghỡn giõy.ộ ạ ẽ ừ ạ ơ ị ầ Trong khi m t thread “sleep”, nú s khụng tiờu t n tài nguyờn CPU và threadộ ẽ ố khỏc cú th ch y.ể ạ

• Phương th c interrupt() đứ ược g i đ đ ng t m t thread. Phọ ể ể ắ ộ ương th c này trứ ả v true n u ng t thành cụng. Phề ế ắ ương th c isInterrupted() dựng đ ki m tra xemứ ể ể thread cú b ng t hay khụng.ị ắ

• Phương th c isAlive() tr v true n u start() đó đứ ả ề ế ược g i và phọ ương th c run()ứ v n đang th c hi n.ẫ ự ệ

• Phương th c setName() đ t tờn cho m t thread, getName() l y tờn m t thread.ứ ặ ộ ấ ộ Phương th c toString() tr v tờn phứ ả ề ương th c, đ u tiờn và nhúm c a thread.ứ ộ ư ủ • Phương th c static currentThread() tr v tham chi u t i thread hi n hành đangứ ả ề ế ớ ệ

th c hi n.ự ệ

• Phương th c joint đ i (ứ ợ wait) m t ph n h i c a m t thụng đi p độ ả ổ ủ ộ ệ ược g i điử trước khi th c hi n thread.ự ệ

I.3 Cỏc bước đ t o m t threadể ạ

Sau đõy là cỏc bước đ n gi n đ th c hi n m t nhi m v trong m t thread riờng:ơ ả ể ự ệ ộ ệ ụ ộ 1. Khai bỏo m t l p cú cài đ t giao di n Runable v i phộ ớ ặ ệ ớ ương th c run() đứ ược đ nhị nghĩa:

class MyRunnable implements Runnable {

public void run() {

// code th c hi nự ệ }

}

2. T o m t đ i tạ ộ ố ượng c a l pủ ớ Runnable r = new MyRunnable();

3. T o m t đ i tạ ộ ố ượng Thread t đ i từ ố ượng Runable trờn: Thread t = new Thread(r);

4. G i phọ ương th c start()ứ t.start();

M t thread cũng cú th độ ể ượ ạc t o ra b ng cỏch xõy d ng m t l p con c a l p Thread:ằ ự ộ ớ ủ ớ class MyThread extends Thread

{

public void run() {

// code c a threadủ }

}

Sau đú ta cũng làm theo cỏc bước 2,3 và 4 đ th c hi n thread.ể ự ệ

II. Cỏc tr ng thỏi c a thread.ạ

• Tr ng thỏi born: Khi thread ch a g i start().ạ ư ọ

• Tr ng thỏi ready: Khi phạ ương th c start() đứ ược g i.ọ

• Tr ng thỏi running: M t Thread tr ng thỏi ready cú quy n u tiờn cao nh t sạ ộ ở ạ ề ư ấ ẽ được chuy n sang tr ng thỏi này.ể ạ

• Tr ng thỏi dead: Khi m t Thread ng ng ho c hoàn thành nhi m v c a nú.ạ ộ ư ặ ệ ụ ủ Ngoài ra, m t thread running cũng cú th b ch n (blocked) trong cỏc thao tỏc vào ra.ộ ể ị ặ Lỳc này nú cũng khụng s d ng tài nguyờn CPU.ử ụ

• Tr ng thỏi sleep: Khi Thread g i phạ ọ ương th c sleep. N u đang tr ng thỏi sleepứ ế ở ạ mà g i phọ ương th c interrupt(), tread s thoỏt kh i tr ng thỏi sleep và chuy nứ ẽ ỏ ạ ể sang tr ng thỏi ready.ạ

Một phần của tài liệu Bài giảng về Java (Trang 129)

Tải bản đầy đủ (PDF)

(151 trang)