1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình giao diện Swing

29 602 5

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 29
Dung lượng 812,13 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mô tả gần như đầy đủ về lập trình swing trong netbean,cho các bạn muốn nghiên cứu về lập trình giao diện java,cung cấp cách nhìn khá đầy đủ về lập trình giao diện.Nếu bạn đã từng vào trang chủ của Java (http:oracle.comjava), bạn sẽ nhìn thấy Swing được mô tả như là một tập các thành phần đồ họa được tạo ra để những cảm quan (LookFeel) được thể hiện vào thời điểm runtime. Thật sự, thì Swing còn nhiều hơn như thế. Swing là bộ công cụ GUI thế hệ kế tiếp mà Sun Microsystems tạo ra cho phép môi trường phát triển enterprise trong Java.Bằng môi trường phát triển enterprise, chúng ta hiểu rằng, các lập trình viên có thể sử dụng Swing để tạo ra các ứng dụng Java có khả năng mở rộng với một dãy nhiều thành phần mạnh mẽ. Thêm vào đó, bạn có thể kế thừa hoặc chỉnh sửa những thành phần này để điều khiển việc hiển thị và các hành xử của chúng.

Trang 1

I,Tổng quan về Swing.

Nếu bạn đã từng vào trang chủ của Java (http://oracle.com/java), bạn sẽ nhìn thấy Swing được mô tả như là một tập các thành phần đồ họa được tạo ra để những cảm quan (Look&Feel) được thể hiện vào thời điểm runtime Thật sự, thì Swing còn nhiều hơn như thế Swing là bộ công cụ GUI thế hệ kế tiếp

mà Sun Microsystems tạo ra cho phép môi trường phát triển enterprise trong Java.Bằng môi trường phát triển enterprise, chúng ta hiểu rằng, các lập trình viên

có thể sử dụng Swing để tạo ra các ứng dụng Java có khả năng mở rộng với một dãy nhiều thành phần mạnh mẽ Thêm vào đó, bạn có thể kế thừa hoặc chỉnh sửa những thành phần này để điều khiển việc hiển thị và các hành xử của chúng

Swing không phải là một từ viết tắt Đó là tên thay thế cho một tập hợp lựa chọn của nó cho các designer khi dự án được thực hiện vào 1996 Swing thật sự là một phần của gia đình rộng lớn các sản phẩm của Java được biết đến như Java Foundation Classes s(JFC) bao gồm nhiều đặc điểm của Internet Foundation Classes của Netscape cũng như bị ảnh hưởng thiết kế của Taligent và Lighthouse Design của IBM Swing được phát triển thật sự kể từ thời điểm bản beta của JDK 1.1, khoảng mùa xuân 1997 Swing API bản beta đưa ra khoảng nửa cuối 1997 và được chính thức phát hành vào tháng 3 năm 1998 Khi được phát hành, các thư viện của Swing 1.0 chứa khoảng 250 lớp và 80 giao tiếp Sự phát triển được tiếp tục khi theo thời gian, bản Swing 1.4 chứa 85 giao tiếp public và 451 lớp public.Mặc dù Swing là được phát triển đơn lẻ từ lõi của Java Development Kit, nó yêu cầu phải có tối thiểu JDK 1.1.5 để chạy Swing được xây dựng dựa trên những

mô hình event được giới thiệu trong serie JDK 1.1 Bạn không thể sử dụng Swing với JDK 1.0.2, thêm vào đó bạn phải có Java 1.1 cho phép trình duyệt hỗ trợ Swing Applet Java 2 SDK 1.4 được phát hành bao gồm nhiều lớp Swing được cập nhật

và hỗ trợ một vài đặc điểm mới Swing được tích hợp đầy đủ trong cả trong bộ công cụ của các nhà phát triển và runtime environment của tất cả các bản phát hành

Trang 2

Java 2 (SDK 1.2 và những phiên bản cao hơn) chứa cả Java Plug-in.Cho đến nay

dù java đã rất lâu từ khi java ra đời nó vẫn là ngô ngữ phổ biến của giới lập trình

Hình 1:Giao diện swing đơn giản

II,Các thành phần giao tiếp cơ bản của swing

1,Các container

1.1.Jframe.

JFrame là một Top-level Container thường được sử dụng để tạo các giao diện ứng dụng người dùng.Nó thường được dùng để chứa các thành phần giao diện khác ( Button, Label, … ).

1.2.JPanel.

JPanel là một container (thùng chứa) nó dùng để chứa các đối tượng tương tự như JFrame tuy nhiên nó không phải là 1 JFrame.

2,Các Components.

Trang 3

Hình 2:Demo Combobox

Khai báo ComboBox như sau:

Trang 5

Hình 3:Demo Jslider

Khai báo JSlider như sau:

public void stateChanged(ChangeEvent e) { JSlider source = (JSlider)e.getSource();

if (!source.getValueIsAdjusting()) {

int fps = (int)source.getValue();

if (fps == 0) {

if (!frozen) stopAnimation(); } else {

delay = 1000 / fps;

timer.setDelay(delay);

timer.setInitialDelay(delay * 10);

if (frozen) startAnimation(); }

Trang 6

Nút radio là nhóm các nút, trong đó, theo quy ước, chỉ có một nút tại một thời điểm có thể được lựa chọn.Dưới đây là mã từ RadioButtonDemo.java tạo ra các nút radio trong ví dụ trước và phản ứng với nhấp chuột.

JRadioButton birdButton = new JRadioButton(birdString);

//Group the radio buttons.

ButtonGroup group = new ButtonGroup();

Trang 7

Một JList hiện cho người dùng với một nhóm sản phẩm, hiển thị trong một hoặc nhiều cột, để lựa chọn Danh sách có thể có nhiều mặt hàng, do đó chúng thường được đặt trong tấm di chuyển Ngoài danh sách, các thành phần Swing sau đây giới thiệu nhiều mặt hàng có thể lựa chọn cho người sử dụng: hộp tổ hợp, trình đơn, bảng biểu, và nhóm các hộp kiểm tra hoặc nút radio Để hiển thị dữ liệu phân cấp, sử dụng một Tree.

Hình 4:Demo Jlist

Demo khai báo Jlist

list = new JList(data); //data has type Object[]

Trang 8

Hình 5:Demo Jtable

Theo mặc định, tất cả các cột trong một bảng bắt đầu với chiều rộng bằng nhau, và các cột tự động điền vào toàn bộ chiều rộng của bảng Khi bảng trở nên rộng hơn hoặc hẹp hơn (có thể xảy ra khi người dùng thay đổi kích thước cửa sổ chứa bảng), tất cả các độ rộng cột thay đổi thích hợp Khi người dùng thay đổi kích thước một cột bằng cách kéo biên phải của mình, sau đó một trong hai cột khác phải thay đổi kích thước, hoặc kích thước của bảng phải thay đổi Theo mặc định, kích thước của bảng vẫn giữ nguyên, và tất cả các cột bên phải của điểm kéo thay đổi kích thước để phù hợp không gian thêm vào hoặc gỡ bỏ từ cột bên trái của điểm kéo Để tùy chỉnh độ rộng cột ban đầu, bạn có thể gọi setPreferredWidth trên mỗi cột của bảng của bạn Điều này đặt ra cả chiều rộng ưa thích của các cột và chiều rộng tương đối gần đúng của họ Ví dụ, thêm đoạn mã sau vào SimpleTableDemo làm cho cột thứ ba của nó lớn hơn các cột khác:

TableColumn column = null;

for (int i = 0; i < 5; i++) {

Trang 9

Để tạo một bảng mẫu trong Swing ta làm như sau.

new AbstractTableModel() {

public String getColumnName(int col) {

return columnNames[col].toString();

}

public int getRowCount() { return rowData.length; }

public int getColumnCount() { return columnNames.length; }

public Object getValueAt(int row, int col) {

public void tableChanged(TableModelEvent e) {

int row = e.getFirstRow();

Trang 10

int column = e.getColumn();

TableModel model = (TableModel)e.getSource();

String columnName = model.getColumnName(column);

Object data = model.getValueAt(row, column);

// Do something with the data

Trang 11

//Set up the dialog that the button brings up.

colorChooser = new JColorChooser();

dialog = JColorChooser.createDialog(button,

"Pick a Color",

true, //modal

colorChooser,

this, //OK button handler

null); //no CANCEL button handler }

public void actionPerformed(ActionEvent e) {

if (EDIT.equals(e.getActionCommand())) {

//The user has clicked the cell, so

//bring up the dialog

button.setBackground(currentColor);

colorChooser.setColor(currentColor);

dialog.setVisible(true);

fireEditingStopped(); //Make the renderer reappear

} else { //User pressed dialog's "OK" button

currentColor = colorChooser.getColor();

}

}

Trang 12

3.6 JTree.

Với lớp JTree, bạn có thể hiển thị dữ liệu phân cấp Một đối tượng JTree không thực sự chứa dữ liệu của bạn; nó chỉ đơn giản là biểu diễn của dữ liệu Giống như bất kỳ thành phần Swing , cây được dữ liệu bằng cách truy vấn mô hình

dữ liệu của nó Đây là một hình ảnh của một cây:

Trang 13

có thể chỉ định nút khác Một nút có thể hoặc có con hay không.Chúng ta cùng nhau xem qua đoạn demo về Tree sau:

private JTree tree;

hệ điều hành có thể khác nhau về đồ họa nhưng bản chất nó không có gì thay đổi.

Khởi tạo một cây thư mục như sau:

rootNode = new DefaultMutableTreeNode("Root Node");

treeModel = new DefaultTreeModel(rootNode);

Trang 14

Nếu DefaultTreeModel không phù hợp với nhu cầu của bạn, bạn sẽ cần phải viết một mô hình dữ liệu tùy chỉnh Mô hình dữ liệu của bạn phải thực hiện giao diện TreeModel TreeModel quy định cụ thể phương pháp để có được một nút cụ thể của cây, nhận được số lượng con cháu của một nút cụ thể, xác định một nút là một chiếc lá, thông báo cho các mô hình của một sự thay đổi trong cây, và thêm và loại bỏ các mô hình giả hoặc cũ trong cây Thật thú vị, giao diện TreeModel chấp nhận bất kỳ loại đối tượng như là một nút cây Nó không đòi hỏi rằng các nút được biểu diễn bởi các đối tượng DefaultMutableTreeNode, hoặc thậm chí là các nút thực hiện giao diện TreeNode Ví dụ, nếu bạn có một cấu trúc dữ liệu phân cấp từ trước, bạn không cần phải lặp lại nó hay buộc nó vào khuôn TreeNode Bạn chỉ cần thực hiện mô hình cây của bạn để nó sử dụng các thông tin trong cấu trúc dữ liệu hiện có.

Button b1=new Button("Center Aligned Button 1");

Button b2=new Button("Center Aligned Button 2");

Button b3=new Button("Center Aligned Button 3");

public Fltest(String title)

{

super(title);

setLayout(new FlowLayout(FlowLayout.CENTER));

Trang 15

Hình 7:FlowLayout

2.BorderLayout.

Trang 16

Container được chia làm 5 vùng theo các hướng:đông,tây,nam,bắc,trung tâm.

IV,Xử lý sự kiện trong Swing.

Sự kiện là sự tương tác của người dùng và phần mềm phải có sự phản hồi lại,sự tương tác có thể là một cú click chuột,nhấn phím,chọn trong danh sách….Khi bắt sự kiện phải chỉ ra đấy là sự kiện nào và của cái gì.

Một số xử lý sự kiện đơn giản.

Trang 17

Ex1:sự kiện của các nut bấm

public class MultiListener implements ActionListener {

Trang 18

actionPerformed Mỗi khi người dùng nhấn nút,hành động này sẽ được bắt bởi ActionListener.Ví dụ:

import java.awt.*;

import java.awt.event.*;

public class AL extends Frame implements WindowListener,ActionListener {

TextField text = new TextField(20);

Button b;

private int numClicks = 0;

public static void main(String[] args) {

AL myWindow = new AL("My first window");

public void windowOpened(WindowEvent e) {}

public void windowActivated(WindowEvent e) {}

public void windowIconified(WindowEvent e) {}

public void windowDeiconified(WindowEvent e) {}

public void windowDeactivated(WindowEvent e) {}

public void windowClosed(WindowEvent e) {}

}

Trang 19

2.ForcusEvent – FocusListener

Đây là sự kiện khi chuột hay phím cần tập trung vào một điểm nào đó lúc này

sẽ máy tính sẽ gọi đến phương thức FocusListener để tập trung cho một giao diện duy nhất.Ví dụ khi bạn cần đăng ký tài khoản con trỏ chuột luôn nháy ở ô đăng ký đầu tiên,đúng không?Sau đây là Demo của FocusListener:

public class FocusEventDemo implements FocusListener {

JList list = new JList(listVector);

list.setSelectedIndex(1); //It's easier to see the focus change

//if an item is selected

list.addFocusListener(this);

JScrollPane listScrollPane = new JScrollPane(list);

//Set up the area that reports focus-gained and focus-lost events

display = new JTextArea();

display.setEditable(false);

//The method setRequestFocusEnabled prevents a

//component from being clickable, but it can still

//get the focus through the keyboard - this ensures

public void focusGained(FocusEvent e) {

displayMessage("Focus gained", e);

}

Trang 20

public void focusLost(FocusEvent e) {

displayMessage("Focus lost", e);

//where initialization occurs

Trang 21

private void addComponentsToPane() {

display = new JTextArea();

Trang 22

displayMessage("WindowListener method called: windowClosing.");

//A pause so user can see the message before

//the window actually closes

ActionListener task = new ActionListener() {

boolean alreadyDisposed = false;

public void actionPerformed(ActionEvent e) {

Timer timer = new Timer(500, task); //fire every half second

timer.setInitialDelay(2000); //first delay 2 seconds

timer.setRepeats(false);

timer.start();

}

public void windowClosed(WindowEvent e) {

//This will only be seen on standard output

displayMessage("WindowListener method called: windowClosed.");

}

public void windowOpened(WindowEvent e) {

displayMessage("WindowListener method called: windowOpened.");

}

public void windowIconified(WindowEvent e) {

displayMessage("WindowListener method called: windowIconified.");

}

public void windowDeiconified(WindowEvent e) {

displayMessage("WindowListener method called: windowDeiconified."); }

public void windowActivated(WindowEvent e) {

displayMessage("WindowListener method called: windowActivated.");

}

public void windowDeactivated(WindowEvent e) {

displayMessage("WindowListener method called: windowDeactivated."); }

public void windowGainedFocus(WindowEvent e) {

displayMessage("WindowFocusListener method called: windowGainedFocus."); }

public void windowLostFocus(WindowEvent e) {

displayMessage("WindowFocusListener method called: windowLostFocus.");

Trang 23

void displayStateMessage(String prefix, WindowEvent e) {

int state = e.getNewState();

int oldState = e.getOldState();

//MAXIMIZED_BOTH is a concatenation of two bits, so

//we need to test for an exact match

if ((state & Frame.MAXIMIZED_BOTH) == Frame.MAXIMIZED_BOTH) { strState += "MAXIMIZED_BOTH";

Trang 24

public class MouseEventDemo implements MouseListener {

//where initialization occurs:

//Register for mouse events on blankArea and the panel

blankArea.addMouseListener(this);

addMouseListener(this);

public void mousePressed(MouseEvent e) {

saySomething("Mouse pressed; # of clicks: "

+ e.getClickCount(), e);

}

public void mouseReleased(MouseEvent e) {

saySomething("Mouse released; # of clicks: "

+ e.getClickCount(), e);

}

public void mouseEntered(MouseEvent e) {

saySomething("Mouse entered", e);

}

public void mouseExited(MouseEvent e) {

saySomething("Mouse exited", e);

}

public void mouseClicked(MouseEvent e) {

saySomething("Mouse clicked (# of clicks: "

Trang 25

6.KeyEvent – KeyListener

Sự kiện này cho thấy khi người dùng gõ vào bàn phím Cụ thể, sự kiện này được bắn bởi các thành phần với trọng tâm là bàn phím khi người dùng nhấn phím bàn phím.Sẽ phát sinh ra hàm Keylistener của máy tính để bắt sự kiện này.Ví dụ:

public class KeyEventDemo implements KeyListener {

//where initialization occurs:

typingArea = new JTextField(20);

typingArea.addKeyListener(this);

//Uncomment this if you wish to turn off focus

//traversal The focus subsystem consumes

//focus traversal keys, such as Tab and Shift Tab

//If you uncomment the following line of code, this

//disables focus traversal and the Tab events

//become available to the key event listener

//typingArea.setFocusTraversalKeysEnabled(false);

/** Handle the key typed event from the text field */

public void keyTyped(KeyEvent e) {

displayInfo(e, "KEY TYPED: ");

}

/** Handle the key-pressed event from the text field */

public void keyPressed(KeyEvent e) {

displayInfo(e, "KEY PRESSED: ");

}

/** Handle the key-released event from the text field */

public void keyReleased(KeyEvent e) {

displayInfo(e, "KEY RELEASED: ");

}

private void displayInfo(KeyEvent e, String keyStatus){

//You should only rely on the key char if the event

//is a key typed event

int keyCode = e.getKeyCode();

keyString = "key code = " + keyCode

+ " ("

+ KeyEvent.getKeyText(keyCode)

Ngày đăng: 31/10/2014, 12:50

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w