Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
309 KB
Nội dung
TRƯỜNG ĐẠI HỌC NÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN ***** ***** MÔN : LẬP TRÌNH JAVA ĐỀ TÀI 1: “ Tìm hiểu lập trình tạo giao diện người sử dụng (GUI) Java Viết chương trình giải phương trình bậc 2.” Giáo viên hướng dẫn : Ngô Công Thắng Lớp : Tin 52C Sinh viên thực : Đỗ Mỹ Hồng Nhung Nguyễn Thị Thu Thủy Đỗ Thanh Mai Bùi Thị Thu Ngân Phạm Ngọc Thắng A - Tìm hiểu lập trình tạo giao diện người sử dụng (GUI) Java: Các ứng dụng phần mềm thân thiện trình bày nhiều hình giao diện đồ họa đẹp mắt Các ngơn ngữ lập trình cung cấp đối tượng đồ họa, chúng điều khiển người lập trình, hay người sử dụng Một số kết quan trọng ngôn ngữ dựa Giao diện người dùng đồ họa (Graphical User Interface - GUI) Trong Java hỗ trợ tính GUI thi hành chúng GUI cung cấp chức nhập liệu theo cách thân thiện với người dùng GUI đa dạng từ ứng dụng đến ứng dụng chứa nhiều điều khiển hộp văn bản, nhã, hộp danh sách hay điều khiển khác Các ngơn ngữ lập trình khác cung cấp nhiều cách khác để tạo GUI Các ngơn ngữ VB hay VC++ cung cấp chức kéo thả phần mềm giống C++ yêu cầu người lập trình phải viết toàn mã để xây dựng GUI Một thành phần (component) GUI đối tượng trực quan Người dùng tương tác với đối tượng thông qua trỏ chuột hay bàn phím Các thành phần button, label v.v… nhìn thấy hình Bất kỳ chung cho tất thành phần GUI tìm thấy lớp Component Để tạo đối tượng GUI cần nhập gói java.awt gói java.swing I Giới thiệu AWT Swing: AWT: AWT viết tắt Abstract Windowing Toolkit AWT lớp Java cho phép tạo GUI chấp nhận nhập liệu người dùng thơng qua bàn phím chuột Gói AWT chứa lớp, giao diện gói khác Hình sau mơ tả phần nhỏ hệ thống phân cấp lớp AWT Object CheckboxGroup MenuComponent Component BorderLayout FlowLayout GridLayout Hệ thống phân cấp lớp AWT Swing: Swing cung cấp các thông tin cần thiết để sử dụng các thành phần Swing một cách có hiệu quả Ví dụ cách một chương trình Swing hiển thị giao diện đồ hoạ người dùng, cách quản lý các sự kiện kích chuột và cuối cùng sẽ là việc sử dụng các khái niệm và chức thế nào một chương trình thực sự Cách sử dụng mỗi thành phần Swing – button, table, các thành phần text… (nhìn chung các thành phần Swing cung tương tự các thành phần AWT Tuy nhiên, chúng có một số tính mới Ví dụ button, label có thể nạp hình ảnh, ) So sánh Swing AWT: • AWT: - Thích hợp với việc phát triển ứng dụng GUI đơn giản - Được gán với Platform xác định • Swing: - Không gắn với Platform cố định - Mạnh, đa năng, linh hoạt II Các lớp GUI Nhóm container: - Được dung để chứa thành phần khác - Các lớp container(AWT): Container Frame Dialog Applet Panel 1.1 Frame: Frame khơng phụ thuộc vào applet trình duyệt Frame hoạt động vật chứa hay thành phần (component) Bạn sử dụng constructor sau để tạo frame: Frame(): Tạo frame không hiển thị (invisible) Frame(String title): Tạo frame khơng hiển thị, có tiêu đề 1.2 Dialog: Lớp ‘Dialog’ tương tự lớp Frame, nghĩa Dialog lớp lớp Window Đối tượng dialog tạo sau: Frame myframe=new Frame(“My frame”); // calling frame String title = “Title”; boolean modal = true; // whether modal or not Dialog dlg=new Dialog(myframe, title, modal); Tham số ‘modal’ dialog ngăn chặn tương tác xảy đến với cửa sổ mở khác, dialog hiển thị hình Kiểu hộp thoại ngăn chặn người dùng tương tác với cửa sổ khác (của ứng dụng) hình, dialog đóng lại 1.3 Pane Panel sử dụng để nhóm số thành phần lại với Cách đơn giản để tạo panel sử dụng phương thức khởi tạo nó, hàm Panel() Nhóm Component: - Gồm subclass lớp Component - Các lớp GUI componet (AWT): Button Label TextFiels TextArea Combobox List RadioButton Menu …… Một component đặt giao diện người dùng, thay đổi kích thước hay làm cho nhìn thấy, ẩn Ví dụ dùng phổ biến Textfield, Label, Checkbox, Textarea v.v… Và thành phần cao cấp khác Scrollbar, Scrollpane Dialog Tuy nhiên chúng không sử dụng thường xuyên TextField TextComponent TextArea Button C o m p o n e n t Label Checkbox List Choice Container Panel Applet Window Frame Canvas Scrollbar Các lớp thành phần Component Dialog Một số thành phần thường sử dụng: 2.1 Nhãn (Label) Lớp sử dụng để trình bày String Nó khơng thể sửa đổi Đây chuỗi đọc Sử dụng constructor sau để tạo label: Label(); //Tạo Label trống Label(String labeltext); //Tạo Label với nội dung cho Label(String labeltext, int alignment) //Tạo Label với chế độ canh lề (alignment) , canh lề Label.LEFT, Label.RIGHT hay Label.CENTER Các phương thức sử dụng phổ biến label trình bày bảng bên dưới: Phương thức setFont(Font f) setText(String s) getText() Chức Thay đổi phông chữ Label Thiết lập nhãn cho Label Lấy nội dung nhãn Ví dụ: label1=new Label(“This is just a label”); //Tạo đối tượng Label add(label1); Label hiển thị thêm vào container Ở đây, Frame container mà thành phần Label thêm vào Việc thực cách sử dụng phương thức add() 2.2 Ô văn (TextField) Một Textfield vùng chứa dịng văn bản, văn hiển thị hay nhập vào người dùng Trong Java, constructor sau sử dụng để tạo Textfield: TextField(): Tạo textfield TextField(int columns): Tạo textfield với số cột cho trước TextField(String s): Tạo textfield với chuỗi văn cho trước TextField(String s, int columns): Tạo textfield với nội dung số cột cho trước Các phương thức thường sử dụng đối tượng TextField tóm tắt bảng sau: Phương thức setEchoChar(char) setText(String s) getText() setEditable(boolean) isEditable() Chức Đặt kí tự thay ký tự nhập vào Gán nội dung cho TextField Lấy nội dung TextField Xác định TextField có soạn thảo hay khơng Nó soạn thảo giá trị tham số truyền vào True Xác định xem trường có mode soạn thảo hay không Giá trị trả kiểu Boolean 2.3 Vùng văn (TextArea) Một Textarea sử dụng văn nhập vào có hai hay nhiều dịng Textarea có scrollbar TextArea trường văn soạn thảo với nhiều dòng - Để tạo Textarea, làm theo bước sau: 1) Tạo đối tượng 2) Chỉ số dịng, số cột đối tượng cần có 3) Bố trí phần tử hình - Trong Java, bạn sử dụng constructor sau để tạo TextArea: TextArea(): Tạo TextArea TextArea(int rows, int cols): Tạo TextArea với số lượng cột dòng cho trước TextArea(String text): Tạo TextArea vớớcnoij dung cho trước TextArea(String text, int rows, int cols): Tạo TextArea với dung, số dòng số cột cho trước Các phương thức thường sử dụng nhiều TextArea: Phương thức setText(String) getText() setEdiable(boolean) Chức Gán nội dung cho TextArea Trả nội dung TextArea Xác định xem TextAreacó thể soạn thảo hay khơng TextArea soạn thảo giá trị True isEdiable() Xác định xem TextArea có chế độ soạn thảo không Trả giá trị kiểu Boolean insertText(String, int) Chèn chuỗi vào vị trí cho trước replaceText(String, int, Thay văn nằm vị trí int, int int) cho trước 2.4 Button (nút ấn) Nút ấn hay gọi nút lệnh phần thiếu GUI Sử dụng button cách dễ để nhận tác động người dùng - Để tạo button, bạn làm theo bước sau: Tạo phần tử Button với nhãn mục đích Button Bố trí phần tử hình Hiển thị phần tử hình Sử dụng hai constructor sau để tạo button Java: Button() Button(String text) Sử dụng setLabel() getLabel() để thiết lập lấy giá trị nhãn button 2.5 Checkbox RadioButton Checkbox sử dụng người dùng tiến hành chọn hay nhiều tùy chọn Người dùng phải click checkbox để chọn hay bỏ chọn chúng Một radiobutton tương tự checkbox Nó sử dụng option button để xác định chọn lựa Bạn chọn option nhóm nút radiobutton, ngược lại bạn chọn nhiều checkbox thời điểm - Làm theo bước sau để tạo checkbox hay radiobutton: 1) Tạo phần tử 2) Xác định trạng thái khởi đầu phần tử (chọn hay không chọn) 3) Bố trí phần tử hình 4) Hiển thị phần tử hình Thành phần checkbox sử dụng lớp phụ gọi CheckboxGroup để tạo radiobutton - Sử dụng constructor sau để tạo checkbox Java: Checkbox(): Tạo checkbox trống Checkbox(String text): Tạo checkbox với nhãn cho - Để tạo radiobutton, tạo đối tượng CheckboxGroup sau: CheckboxGroup cg=new CheckboxGroup(); Sau tạo đối tượng, sau: Checkbox male=new Checkbox(“male”, cg, true); Checkbox female=new Checkbox(“female”, cg, false); Chúng ta sử dụng phương thức setState() getState() để thiết lập nhận trạng thái checkbox 2.6 Danh sách chọn lựa (Choice List) - Để tạo danh sách chọn lựa, làm theo bước cho sau đây: 1) Tạo danh sách phần tử 2) Thêm mục (có kiểu String) vào danh sách, lần thêm mục 3) Bố trí danh sách hình 4) Hiển thị danh sách hình - Java hỗ trợ lớp Choice cho phép tạo danh sách chứa nhiều mục Khi danh sách vừa tạo ra, rỗng Choice colors=new Choice(); Mỗi thời điểm thêm item cách sử dụng phương thức addItem bên dưới: colors.addItem(“Red”); colors.addItem(“Green”); Quản lý cách trình bày (Layout manager) - Layout manager điều khiển cách trình bày vật lý phần tử GUI button, textbox, option button v.v… Một layout manager tự động bố trí thành phần container - Các kiểu trình bày khác nhau(AWT): Flow layout Border layout Card layout Grid layout GridBag Layout 3.1 FlowLayout manager ‘FlowLayout’ layout manager mặc định cho Applet Panel Các thành phần xắp xếp từ góc trái đến góc phải hình Khi số thành phần tạo, chúng xắp xếp theo hàng, từ trái sang phải Các constructor FlowLayout: FlowLayout mylayout = new FlowLayout() // constructor FlowLayout exLayout=new FlowLayout(FlowLayout.RIGHT); setLayout(exLayout); //setting the layout to Flowlayout Các điều khiển canh bên trái, bên phải hay Để canh điều khiển bên phải, bạn sử dụng cú pháp sau: setLayout(new FlowLayout(FlowLayout.RIGHT)); 3.2 BorderLayout Manager ‘BorderLayout’ layout manager mặc định cho ‘Window’, ‘Frame’ ‘Dialog’ Layout xắp xếp tối đa thành phần container Những thành phần đặt hướng ‘North’, ‘South’, ‘East’, ‘West’ ‘Center’ container NORTH – Đặt đỉnh container EAST – Đặt phía bên phải container SOUTH – Đặt phía container WEST – Đặt phía bên trái container CENTER – Đặt container - Để thêm thành phần vào vùng ‘North’, bạn sử dụng cú pháp sau: Button b1=new Button(“North Button”); // khai báo thành phần setLayout(new BorderLayout()); // thiết lập layout add(b1,BorderLayout.NORTH); // thêm thành phần vào layout - GridLayout tạo sau: Gridlayout g1=new GridLayout(4,3); //4 số dòng số cột 3.5 GridBagLayout Manager ‘GridBagLayout’ cách trình bày hiệu phức tạp cách trình bày khác Layout đặt thành phần vào vị trí xác Với layout này, thành phần khơng cần có kích thước Nó tương tự GridLayout manager, thành phần xắp xếp lưới theo dòng cột Tuy nhiên, thứ tự đặt thành phần không theo nguyên tắc từ trái sang phải từ xuống GridBagLayout gb=new GridBagLayout() ContainerName.setLayout(gb); Để sử dụng layout này, bạn cần cung cấp thơng tin kích thước vị trí thành phần Lớp ‘GridBagLayoutConstraints’ chứa tất thông tin mà lớp GridLayout cần để bố trí định kích thước thành phần Bảng sau liệt kê danh sách biến thành viên lớp GridBagConstraints: Các biến thành viên weightx, weighty gridwidth, gridheight ipadx, ipady anchor Mục đích Chỉ phân phối khoảng trống GridBagLayout Giá trị mặc định cho biến Chỉ số lượng ô (cell) chiều ngang chiều dọc vùng hiển thị thành phần Chỉ lượng làm thay đổi chiều cao chiều rộng tối thiểu thành phần Nó thêm 2*ipadx vào chiều rộng tối thiểu 2*ipady vào chiều cao tối thiểu thành phần Giá trị mặc định cho hai Chỉ cách xắp xếp thành phần cell Mặc định đặt vào cell Các thành viên liệu tĩnh (static) sau sử dụng: GridBagConstraints.NORTH GridBagConstraints.EAST GridBagConstraints.WEST GridBagConstraints.SOUTH GridBagConstraints.NORTHEAST GridBagConstraints.SOUTHEAST gridx, gridy fill Chỉ vị trí cell đặt thành phần Khi thiết lập giá trị gridx ‘GridbagConstraints.RELATIVE’ thành phần thêm nằm vị trí bên phải thành phần cuối Chỉ cách mà thành phần bố trí vào cell cell lớn thành phần Mặc định kích thước thành phần khơng thay đổi Bảng sau cung cấp danh sách biến liệu tĩnh giá trị cho biến fill: Giá trị GridBagConstraints.NONE Mô tả Mặc định, không làm thay đổi kích thước thành phần GridBagConstraints.HORIZONT Tăng chiều rộng thành phần theo AL chiều ngang (HORIZONTAL) để làm cho thành phần khớp với chiều ngang GridBagConstraints.VERTICAL Tăng chiều cao thành phần theo chiều đứng (VERTICAL) để làm cho thành phần khớp với chiều dọc GridBagConstraints.BOTH Tăng chiều rộng, chiều cao thành phần theo chiều ngang chiều dọc insets Xác định khoảng cách top, buttom, left right thành phần Mặc định Sử dụng phương thức ‘setConstraints()’ để thiết lập số cho thành phần Cho ví dụ: gblay.setConstraints(lb1, gbc); // ‘gblay’ đối tượng lớp GridBagLayout, lbl thành phần ‘Label’ ‘gbc’ đối tượng lớp GridBagConstraints gbc.fill=GridBagConstraints.BOTH; Thành viên fill lớp GridBagConstraints thành phần mở rộng theo hướng nằm ngang thẳng đứng Cú pháp sau mô tả thành phần mở rộng theo hướng nằm ngang: gbc.fill=GridBagConstraints.HORIZNTAL; - Cú pháp sau thêm vào thành phần TextArea với số dòng số cột cần chiếm: addComponent(ta,0,2,4,1); // – Khởi đầu từ dòng thứ – Khởi đầu từ dòng thứ – ta chiếm giữ dòng – ta chiếm cột - Sử dụng cú pháp sau để bố trí thành phần vào dịng cột đó: gbc.gridx=col; gbc.gridy=row; Ở (gridx,gridy) cột dòng nơi mà thành phần đặt vào - Sử dụng cú pháp sau để số lượng cột dịng mà thành phần chiếm giữ: gbc.gridwitdh=ncol; gbc.gridheight=nrow; Ở đây, gridwidth xác định số lượng cột mà thành phần chiếm giữ gridheight xác định số lượng dòng mà thành phần chiếm giữ Khi container bị thay đổi kích thước khoảng trắng phụ tồn tại, thành phần có chiều rộng lớn chiếm giữ nhiều khoảng trống thành phần có giá trị chiều rộng nhỏ Xử lý kiện Việc xử lý kiện phụ thuộc vào ứng dụng Abstract Windowing Toolkit (AWT) xử lý vài kiện Ứng dụng cần đăng ký hàm xử lý kiện với đối tượng Hàm xử lý kiện gọi kiện tương ứng phát sinh Một Event Listener lắng nghe kiện mà đối tượng thiết lập Mỗi event listener cung cấp phương thức xử lý kiện Lớp thi hành listener cần phải định nghĩa phương thức Để sử dụng mơ hình này, bạn làm theo bước sau: - Cài đặt giao diện listener thích hợp Cấu trúc sau: public class MyApp extends Frame implements ActionListener - Xác định tất thành phần tạo kiện Các thành phần button, label, menu item, hay window - Ví dụ: để đăng ký thành phần với listener, ta sử dụng: exitbtn.addActionListener(This); Xác định tất kiện xử lý Các kiện ‘ActionEvent’ button click hay ‘mouseEvent’ chuột kéo Thi hành phương thức listener viết hàm xử lý kiện tương ứng với phương thức Bảng sau kiện khác mô tả chúng: Lớp kiện ActionEvent AdjustmentEvent ComponentEvent FocusEvent ItemEvent WindowEvent TextEvent MouseEvent KeyEvent Mô tả Phát sinh button nhấn, item danh sách chọn lựa nhấn đúp (double-click) hay menu chọn Phát sinh scrollbar sử dụng Phát sinh thành phần thay đổi kích thước, di chuyển, bị ẩn hay làm cho hoạt động Phát sinh thành phần hay nhận focus từ bàn phím Phát sinh mục menu chọn hay bỏ chọn; hay checkbox hay item danh sách click Phát sinh cửa sổ kích hoạt, đóng, mở hay Phát sinh giá trị thành phần textfield hay textarea bị thay đổi Phát sinh chuột di chuyển, click, kéo hay thả Phát sinh bàn phím ấn, nhả - Các giao diện cần cài đặt để xử lý số kiện là: ActionListener WindowListener AdjustmentListener ComponentListener FocusListener MouseMotionListener TextListener ItemListener MouseListener KeyListener Các giao diện định nghĩa số phương thức để xử lý kiện Những phương thức nạp chồng lớp mà cài đặt giao diện -Chương trình sau sử dụng ActionListener để xử lý kiện liên quan với button ActionEvent có hai phương thức: getSource(): Để trả nguồn kiện toString(): Để trả chuỗi tương đương với kiện Ví dụ: Tạo giao diện tính nhân đơi số nhập vào import java.awt.*; import java.awt.event.*; class evttest extends Frame implements ActionListener { Label lab=new Label(“Enter a number”); TextField tf1=new TextField(5); TextField tf2=new TextField(5); Button btnResult=new Button(“Double is”); Button ext=new Button(“exit”); public evttest(String title) { super(title); setLayout(new FlowLayout()); btnResult.addActionListener(this); ext.addActionListener(this); add(lab); add(tf1); add(btnResult); add(tf2); add(ext); } public void actionPerformed(ActionEvent ae) { if (ae.getSource()==btnResult) { int num=Integer.parseInt(tf1.getText())*2; tf2.setText(String.valueOf(num)); } if (ae.getSource()==ext) { System.exit(0); } } public static void main(String args[]) { evttest t=new evttest(“Event handling”); t.setSize(300,200); t.show(); } } Kết xuất chương trình hình bên dưới: Cây phân cấp lớp gói event Object java.util.EventObject Java.awt.Event ActionEvent AdjustmentEvent ContainerEvent KeyEvent ComponentEvent InputEvent FocusEvent ItemEvent WindowEvent MouseEvent Thực đơn (menu) Ngơn ngữ Java có tập hợp lớp đối tượng để tạo menu Có hai loại menu – pull down pop-up Menu làm cho ứng dụng ta xây dựng dễ sử dụng Ta có đặt menubar frame Menubar nằm ngang đặt đỉnh frame Nó liệt kê mục chọn khác hay gọi menu Một menu độc lập chứa mục chọn con, mục gọi Menu Item Java cung cấp Checkbox MenuItem, chúng bật hay mở, phụ thuộc vào trạng thái Ví dụ sau minh họa cách sử dụng menubar, menu, menuItem, CheckboxMenuItem import java.awt.*; import java.awt.event.*; class MyFrame extends Frame implements ActionListener, MouseListener { MenuItem exitItem; PopupMenu optionsMenu; Frame frame; public MyFrame() { setTitle("Menu Example"); setSize(300,200); MenuBar mbar=new MenuBar(); setMenuBar(mbar); Menu fileMenu=new Menu("File"); mbar.add(fileMenu); fileMenu.addActionListener(this); MenuItem newItem=new MenuItem("New"); fileMenu.add(newItem); MenuItem openItem=new MenuItem("Open"); fileMenu.add(openItem); fileMenu.addSeparator(); MenuItem saveItem=new MenuItem("Save"); fileMenu.add(saveItem); MenuItem saveAsItem=new MenuItem("Save As"); fileMenu.add(saveAsItem); fileMenu.addSeparator(); exitItem=new MenuItem("Exit"); fileMenu.add(exitItem); saveAsItem.addActionListener(this); Menu editMenu=new Menu("Edit"); mbar.add(editMenu); editMenu.addActionListener(this); MenuItem cutItem=new MenuItem("Cut"); editMenu.add(cutItem); MenuItem copyItem=new MenuItem("Copy"); editMenu.add(copyItem); MenuItem pasteItem=new MenuItem("Paste"); editMenu.add(pasteItem); editMenu.addSeparator(); Menu helpMenu=new Menu("Help"); mbar.add(helpMenu); helpMenu.addActionListener(this); MenuItem contentItem=new MenuItem("Content"); helpMenu.add(contentItem); MenuItem indexItem=new MenuItem("Index"); helpMenu.add(indexItem); Menu findMenu=new Menu("Find"); helpMenu.add(findMenu); addMouseListener(this); MenuItem nameItem=new MenuItem("Search by Name"); findMenu.add(nameItem); MenuItem cacheItem=new MenuItem("Search from cache"); findMenu.add(cacheItem); optionsMenu=new PopupMenu("Options"); editMenu.add(optionsMenu); optionsMenu.addActionListener(this); MenuItem readItem=new MenuItem("Read Only"); optionsMenu.add(readItem); optionsMenu.addSeparator(); Menu formatMenu=new Menu("Format text"); optionsMenu.add(formatMenu); this.add(optionsMenu); formatMenu.addActionListener(this); CheckboxMenuIteminsertItem=new CheckboxMenuItem("Insert",true); formatMenu.add(insertItem); CheckboxMenuItemovertypeItem=newCheckboxMenuItem("Overtype",false); formatMenu.add(overtypeItem); } public void actionPerformed(ActionEvent ae) { if (ae.getActionCommand().equals("Exit")) { System.exit(0); } } public void mouseEntered(MouseEvent m){} public void mouseExited(MouseEvent m){} public void mouseClicked(MouseEvent m) { optionsMenu.show(this,m.getX(),m.getY()); } public void mouseReleased(MouseEvent m){} public void mousePressed(MouseEvent m){} public static void main(String[] args) { MyFrame frame=new MyFrame(); frame.show(); } } Khi bạn thực thi chương trình trên, hình với trình đơn File, Edit Help hiển thị Khi bạn click vào mục File, bạn thấy kết xuất sau đây: Một menu chứa menu Khi bạn click vào trình đơn Help, mục có tên Content, Index Find xuất Trong trình đơn Find, có mục Search by name Search from Cache Mặt khác pop-up menu bạn nhấn chuột phải hình: Các mục chọn trình bày pop-up menu Read-Only Format text Mục ‘Format text’ có mục Insert Overtype Những mục chọn thuộc kiểu CheckboxMenuItem Khi bạn click vào mục chọn, đánh dấu bạn thấy dấu chọn tương ứng mục chọn Ngơn ngữ Java cung cấp lớp khác Những lớp sử dụng để tạo Menubar, Menu, MenuItem CheckboxMenuItem chương trình B- Viết chương trình giải phương trình bậc import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MainFrame extends JFrame implements ActionListener { // ===============Khoi tao cac ToolBox================== private JLabel jLabel1 = new JLabel("Giai phuong trinh bac hai"); private JPanel jPanel1 = new JPanel(); private JTextField txta = new JTextField(5); private JLabel jLabel2 = new JLabel("X² +"); private JTextField txtb = new JTextField(5); private JLabel jLabel3 = new JLabel("X +"); private JTextField txtc = new JTextField(5); private JLabel jLabel4 = new JLabel("= 0"); private JPanel jPanel2 = new JPanel(); private JLabel jLabel5 = new JLabel("Delta = "); private JLabel lblDelta = new JLabel(); private JPanel jPanel3 = new JPanel(new GridLayout(2, 1)); private JLabel lblX1 = new JLabel(); private JLabel lblX2 = new JLabel(); private JButton btnShow = new JButton("Tim nghiem"); private JButton btnExit = new JButton("Thoat"); private JButton btnReset = new JButton("Reset"); private JPanel optionsPane = new JPanel(new GridLayout(3, 1)); //=============CHUONG TRINH CHINH====== public static void main(String args[]) { MainFrame M=new MainFrame(); M.show(); } //=========DINH NGHIA FROM MAINFRAME======= public MainFrame() { //===== Thay doi cac thuoc tinh cua MainFrame====== setSize(500,400); setLayout(new FlowLayout(FlowLayout.CENTER)); setTitle("CHUONG TRINH UNG DUNG"); setResizable(false); //======Thay doi cac thuoc tinh cua cac ToolBox ===== lblX1.setForeground(Color.blue); lblX2.setForeground(Color.blue); jPanel1.setBorder(BorderFactory.createTitledBorder("Du lieu vao")); jPanel2.setBorder(BorderFactory.createTitledBorder("Delta")); jPanel3.setBorder(BorderFactory.createTitledBorder("Nghiem")); txta.setHorizontalAlignment(JTextField.CENTER); txtb.setHorizontalAlignment(JTextField.CENTER); txtc.setHorizontalAlignment(JTextField.CENTER); btnShow.setPreferredSize(new Dimension(120, 30)); btnExit.setPreferredSize(new Dimension(120, 30)); btnReset.setPreferredSize(new Dimension(120, 30)); optionsPane.setPreferredSize(new Dimension(400, 300)); //====== Them cac Toolbox vao MainFrame ======= add(jLabel1); jPanel1.add(txta); jPanel1.add(jLabel2); jPanel1.add(txtb); jPanel1.add(jLabel3); jPanel1.add(txtc); jPanel1.add(jLabel4); add(jPanel1); jPanel2.add(jLabel5); jPanel2.add(lblDelta); add(jPanel2); jPanel3.add(lblX1); jPanel3.add(lblX2); add(jPanel3); optionsPane.add(jPanel1); optionsPane.add(jPanel2); optionsPane.add(jPanel3); add(optionsPane); add(btnShow); add(btnReset); add(btnExit); //========Bat su kien cho cac Button ========= btnExit.addActionListener(this); btnShow.addActionListener(this); btnReset.addActionListener(this); } //=========DINH NGHIA HAM ActionPerformed====== public void actionPerformed(ActionEvent e) { float a, b, c; double delta, x1, x2; String strDelta; int value = 0; if(e.getSource()== btnExit) this.dispose(); else if(e.getSource()==btnReset) { txta.setText(""); txtb.setText(""); txtc.setText(""); lblDelta.setText(""); lblX1.setText(""); lblX2.setText(""); txta.requestFocus(); } else if(e.getSource()==btnShow) { if(txta.getText().equals("") || txtb.getText().equals("") || txtc.getText().equals("")) { JOptionPane.showMessageDialog(null,"Nhap sai du lieu","Bao loi",JOptionPane.ERROR_MESSAGE); return; } else { a = Float.valueOf(txta.getText()).floatValue(); b = Float.valueOf(txtb.getText()).floatValue(); c = Float.valueOf(txtc.getText()).floatValue(); if(a != 0) { delta = Math.pow(b, 2) - * a * c; if(delta > 0) { strDelta = String.valueOf(delta) + " > 0"; lblDelta.setText(strDelta); x1 = (-b-Math.sqrt(delta))/(2 * a); x2 = (-b+Math.sqrt(delta))/(2 * a); lblX1.setText("Nghiem X1 = " + String.valueOf(x1)); lblX2.setText("Nghiem X2 = " + String.valueOf(x2)); } else if(delta == 0) { strDelta = String.valueOf(delta) + " = 0"; lblDelta.setText(strDelta); x1 = -b/(2 * a); lblX1.setText("Nghiem nhat: " + String.valueOf(x1)); } else { strDelta = String.valueOf(delta) + " < 0"; lblDelta.setText(strDelta); lblX1.setText("Phuong trinh vo nghiem!"); } } else { if(b != 0)lblX1.setText("Phuong trinh co nghiem : " + -c/b); else if(c == 0) lblX1.setText("Phuong trinh co vo so nghiem!"); else lblX1.setText("Phuong trinh vo nghiem!"); } } } } } ...A - Tìm hiểu lập trình tạo giao diện người sử dụng (GUI) Java: Các ứng dụng phần mềm thân thiện trình bày nhiều hình giao diện đồ họa đẹp mắt Các ngơn ngữ lập trình cung cấp đối... khác Những lớp sử dụng để tạo Menubar, Menu, MenuItem CheckboxMenuItem chương trình B- Viết chương trình giải phương trình bậc import javax.swing.*; import java.awt.*; import java.awt.event.*;... thường sử dụng: 2. 1 Nhãn (Label) Lớp sử dụng để trình bày String Nó khơng thể sửa đổi Đây chuỗi đọc Sử dụng constructor sau để tạo label: Label(); / /Tạo Label trống Label(String labeltext); //Tạo