Giới thiệu về cỏc thành phần GUI cơ bản

Một phần của tài liệu Bài giảng ngôn ngữ lập trình Java doc (Trang 115 - 126)

• Jlabel: Chỉ một vựng hiển thị văn bản hoặc cỏc icon.

• JtextField: Chỉ một đối tượng cho phộp nhập dữ liệu từ bàn phớm. • JButton: Đối tượng nỳt bấm

• JcheckBox: Đối tượng nỳt chọn. • JcomboBox: Đối tượng ComboBox • Jlist: Danh sỏch

• JPanel: Nơi đặt cỏc thành phần GUI núi trờn.

III.1 Nỳt nhấn

Cỏch tạo nỳt nhấn

Ta gọi phương thức khởi dựng: public Button(String label) label là tờn nhón của nỳt nhấn Vớ dụ: Button nutOK = new Button("OK");

Đư nỳt nhấn vào Applet hay cửa sổ chương trỡnh bằng lệnh: add(nutOK);

Để đổi tờn nhón cho nỳt nhấn ta gọi phương thức public void setLabel(String newLabel). Để xem tờn nhón hiện tại của nỳt nhấn, ta gọi phương thức public String getLabel() Vớ dụ: Button nutOK = new Button(); nutOK.setLabel("OK");

Sử dụng nỳt nhấn

Khi kớch chuột vào nỳt nhấn sẽ thực hiện một cụng việc nào đú. Vấn đề này chỳng ta đó xem xột trong phần xử lý cỏc sự kiện

III.2 Nhón (Label)

Tạo nhón khụng cú nội dung gỡ: public Label() hoặc tạo nhón cú nội dung: public Label(String nameLabel).

hoặc thờm chế độ căn lề: pubic Label(String name, int align) Một số phương thức hay sử dụng:

setText(String nameLabel): Đặt lại nội dung mới cho nhón. Label.CENTER, Label.LEFT, Label.RIGHT: những giỏ trị căn lề.

Lấy nội dung hiện hành của nhón: public String getText();

Xem nhón đang được căn lề ở chế độ nào: public int getAlignment();

Thiết lập lại chế độ căn lề: public void setAlignment(int align) throws IlligalArgumentException

Sau đõy là vớ dụ sử dụng JLabel: // Minh họa về JLabel

// Nhập cỏc gúi thư viện import java.awt.*; import java.awt.event.*; // Gúi Java mở rộng import javax.swing.*;

public class LabelTest extends JFrame { private JLabel label1, label2, label3; // Tạo giao diện GUI

public LabelTest() {

super( "Testing JLabel" ); // Contructor của JFrame // Lấy đối tượng pane của một JFrame

Container container = getContentPane(); container.setLayout( new FlowLayout() ); // constructor của JLabel

label1 = new JLabel( "Label with text" );

label1.setToolTipText( "This is label1" ); // hiển thị khi di chuột đến container.add( label1 ); // thờm vào container

// Tạo Jlabel với icon hoặc text

Icon bug = new ImageIcon( "bug1.gif" );

label2 = new JLabel( "Label with text and icon", bug, SwingConstants.LEFT ); label2.setToolTipText( "This is label2" );

container.add( label2 ); // JLabel khụng tham số label3 = new JLabel();

label3.setText( "Label with icon and text at bottom" ); label3.setIcon( bug );

label3.setHorizontalTextPosition( SwingConstants.CENTER ); label3.setVerticalTextPosition( SwingConstants.BOTTOM ); label3.setToolTipText( "This is label3" );

container.add( label3 ); setSize( 275, 170 ); setVisible( true ); }

// hàm main

public static void main( String args[] ) {

LabelTest application = new LabelTest(); application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

} }

III.3 Nỳt đỏnh dấu (checkbox)

Một nỳt đỏnh dấu cú hai phần: nhón và dấu biểu hiện trạng thỏi. Ta cú thể tạo nỳt đỏnh dấu theo 5 phương thức khởi dựng:

• public Checkbox(): tạo ụ đỏnh dấu khụng cú nhón.

• public Checkbox(String cbLabel): tạo ụ đỏnh dấu với một nhón cbLabel gắn kốm. • public Checkbox(String cbLabel, boolean state): Tạo ụ đỏnh dấu với một nhón

cbLabel gắn kốm với trạng thỏi ban đầu của ụ đú.

• public Checkbox(String cbLabel, boolean state, CheckboxGroup g);

• public Checkbox(String cbLabel , CheckboxGroup g, boolean state): dựng để tạo ụ đỏnh dấu cú nhón với trạng thỏi đỏnh dấu ban đầu, nỳt tạo ra được nhúm trong nhúm g. Nhúm cỏc ụ đỏnh dấu trở thành nỳt chọn.

Kiểm tra và thiết lập trạng thỏi:

Để kiểm tra một ụ cú được đỏnh dấu khụng ta dựng phương thức: public boolean getState();

Nếu muốn thiết lập trạng thỏi, ta dựng phương thức: setState(boolean state).

Xử lý tỡnh huống khi ụ đỏnh dấu thay đổi trạng thỏi:

Để lắng nghe ụ đỏnh dấu, ta dựng phương thức: addItemListener(ItemListener L) Để loại bỏ lắng nghe đú ta dựng phương thức: removeItemListener(ItemListener L)

// Java core packages import java.awt.*; import java.awt.event.*; // Java extension packages import javax.swing.*;

public class CheckBoxTest extends JFrame { private JTextField field;

private JCheckBox bold, italic; // Thiết lập GUI

public CheckBoxTest() {

super( "JCheckBox Test" ); // lấy pane

Container container = getContentPane(); container.setLayout( new FlowLayout() ); // Đặt ụ nhập và font chữ

field = new JTextField( "Theo dừi font chữ thay đổi", 20 ); field.setFont( new Font( "Serif", Font.PLAIN, 14 ) ); container.add( field );

// tạo đối tượng checkbox

bold = new JCheckBox( "Bold" ); container.add( bold );

italic = new JCheckBox( "Italic" ); container.add( italic );

// Đăng ký đối tượng lắng nghe

CheckBoxHandler handler = new CheckBoxHandler(); bold.addItemListener( handler ); italic.addItemListener( handler ); setSize( 275, 100 ); setVisible( true ); } // execute application

public static void main( String args[] ) {

CheckBoxTest application = new CheckBoxTest();

application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }

// Lớp nội lắng nghe sự kiện

private class CheckBoxHandler implements ItemListener { private int valBold = Font.PLAIN;

private int valItalic = Font.PLAIN; // Đỏp ứng sự kiện chọn ụ

public void itemStateChanged( ItemEvent event ) { // xử lý chọn ụ chữ đậm if ( event.getSource() == bold ) if ( event.getStateChange() = = ItemEvent.SELECTED ) valBold = Font.BOLD; else valBold = Font.PLAIN; // Chọn ụ chứ nghiờng 118

III.4 Nỳt chọn (radio button)

Tạo nỳt chọn:

Đõy là trường hợp đặc biệt của ụ đỏnh dấu. Ta tạo ra ụ đỏnh dấu và đặt nú vào một nhúm, ta cú phương thức sau: public CheckboxGroup();

Với một nhúm cỏc nỳt ta cú thể lấy ra đối tượng hiện tại đang được chọn bằng cỏch gọi phương thức getSelectedCheckbox().

Đặt lựa chọn ta dựng: setSelectedCheckbox().

Cỏch sử dụng nỳt chọn:

Ta tạo một đối tượng giao tiếp ItemListener để lắng nghe tỡnh huống.

Phương thức getItemSelectable sẽ trả về đối tượng nơi mà tỡnh huống phỏt sinh: public ItemSelectable getItemSelectable();

Phương thức getItem của đối tượng ItemEvent sẽ cho ta biết giỏ trị nỳt chọn: public Object getItem();

Sau đõy là vớ dụ về sử dụng ụ chọn:

// Đăng ký đối tượng lắng nghe cho mỗi ụ chọn radio RadioButtonHandler handler = new RadioButtonHandler(); plainButton.addItemListener( handler );

boldButton.addItemListener( handler ); italicButton.addItemListener( handler ); boldItalicButton.addItemListener( handler ); // Nhúm cỏc ụ lại

radioGroup = new ButtonGroup(); radioGroup.add( plainButton ); radioGroup.add( boldButton ); radioGroup.add( italicButton ); radioGroup.add( boldItalicButton );

Về bắt cỏc sự kiện cũng tương tự ụ đỏnh dấu.

III.5 Hộp thoại Combo

Java hỗ trợ hộp thoại Combo thụng qua đối tượng của class JComboBox. Đõy là một danh sỏch xổ xuống, đưa ra một danh sỏch cỏc mục và ta chỉ được chọn 1 mục trong đú. JComboBox cũng phỏt sinh sự kiện ItemEvent giống như JRadioButton và JCheckBox.

Chương trỡnh sau đõy minh họa việc sử dụng JComboBox với cỏc phần tử là cỏc ảnh GIF. // Java core packages

import java.awt.*; import java.awt.event.*; // Java extension packages import javax.swing.*;

public class ComboBoxTest extends JFrame { private JComboBox imagesComboBox; private JLabel label;

private String names[] = { "bug1.gif", "bug2.gif", "travelbug.gif", "buganim.gif" };

private Icon icons[] = { new ImageIcon(names[0]), new ImageIcon(names[1]), new ImageIcon(names[2]), new ImageIcon(names[3])};

// Thiết lập GUI

public ComboBoxTest() {

super( "Testing JComboBox" ); // Đặt layout

Container container = getContentPane(); container.setLayout( new FlowLayout() ); // khởi tạo combo

imagesComboBox = new JComboBox( names ); imagesComboBox.setMaximumRowCount( 3 );

imagesComboBox.addItemListener( new ItemListener() { // bắt sự kiện

public void itemStateChanged( ItemEvent event ) { // liệu cú phần tử được chọn if ( event.getStateChange() == ItemEvent.SELECTED ) label.setIcon( icons[imagesComboBox.getSelectedIndex() ] ); } } ); container.add( imagesComboBox );

// đặt một JLabel hiển thi ImageIcons tương ứng label = new JLabel( icons[ 0 ] );

container.add( label ); setSize( 350, 100 ); setVisible( true ); }

// hàm main

public static void main( String args[] ) {

ComboBoxTest application = new ComboBoxTest();

aplication.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } }

III.6 Danh sỏch (Lists)

Lớp List cho phộp ta tạo một danh sỏch cỏc phần tử cho ta lựa chọn

Phương thức khởi dựng mặc định: public List(). vd: List list = new List();

hoặc để chỉ định bao nhiờu phần tử sẽ được hiển thị cựng một lỳc trong danh sỏch: public List(int rows)

hoặc tạo một danh sỏch cho phộp lựa chọn nhiều phần tử cựng một lỳc: public List(int rows, boolean multiMode)

Sử dụng danh sỏch chọn:

Đưa từng phần vào danh sỏch bằng lệnh add(String item).vd: list.add("Mau do");

Chốn một phần tử vào danh sỏch bằng phương thức add(String item, int index), index là vị trớ phần tử mà ta muốn chốn.

Thay thế một phần tử ở vị trớ pos bằng phần tử mới: replaceItem(String newItem, int pos) vd: list.replaceItem("Xanh", 4);

Loại bỏ một phần tử trong danh sỏch ta dựng phương thức remove(int pos). Loại bỏ hết danh sỏch: removeAll().

Trả về vị trớ của phần tử được chọn, nếu khụng cú phần tử nào được chọn thỡ giỏ trị sẽ là -1: getSelectedIndex(). Nếu được chọn nhiều thỡ dựng: int[] getSelectedIndex()

Lấy ra phần tử được chọn: getSelectedItem(). Chọn nhiều thỡ dựng: String[] getSelectedItem().

Để chọn một phần tử mà ta biết vị trớ: select(int index)

Nếu phần tử đang ở trạng thỏi chọn chuyển sang trạng thỏi bỡnh thường: deselect(int index)

Trạng thỏi của một phần tử: isSelected(int index)

Chuyển chế độ đơn chọn sang đa chọn: setMultiplesSelections(boolean bl) Cho biết một danh sỏch là đơn chọn hay đa chọn: boolean isMultipleMode(). Sử dụng đối tượng danh sỏch:

Cài đặt giao tiếp ItemListener để tạo đối tượng biết lắng nghe sự thay đổi trạng thỏi của cỏc phần tử trong danh sỏch.

Sử dụng đối số ItemEvent trong phương thức itemStateChange để biết được chỉ số của phần tử đang thay đổi trạng thỏi.

Để xử lý được tỡnh huống nhấp đụi chuột, ta cài đặt giao tiếp ActionListener và gắn nú vào danh sỏch.

Phương thức getActionCommand() trong ActionEvent sẽ trả về tờn của phần tử bị nhấp. // Java core packages

import java.awt.*;

// Java extension packages import javax.swing.*; import javax.swing.event.*;

public class ListTest extends JFrame { private JList colorList;

private Container container;

private String colorNames[] = { "Black", "Blue", "Cyan", "Dark Gray", "Gray", "Green", "Light Gray", "Magenta", "Orange", "Pink", "Red", "White", "Yellow" };

private Color colors[] = { Color.black, Color.blue, Color.cyan, Color.darkGray, Color.gray, Color.green, Color.lightGray, Color.magenta, Color.orange, Color.pink, Color.red, Color.white, Color.yellow };

// Thiết lập GUI public ListTest() {

super( "List Test" ); // lấy layout

container = getContentPane();

container.setLayout( new FlowLayout() ); // Tạo danh sỏch

colorList = new JList( colorNames ); colorList.setVisibleRowCount( 5 ); // Khụng cho chọn nhiều

colorList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION ); // thờm một JScrollPane chứa danh sỏch

container.add( new JScrollPane( colorList ) ); // đặt lắng nghe sự kiện

colorList.addListSelectionListener( new ListSelectionListener() { public void valueChanged( ListSelectionEvent event )

{

container.setBackground( colors[ colorList.getSelectedIndex() ] ); } } );

setSize( 350, 150 ); setVisible( true ); }

// hàm main

public static void main( String args[] ) {

ListTest application = new ListTest();

application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } }

III.7 ễ văn bản (text field) và vựng văn bản (text areas)

Tạo ụ văn bản:

• Khởi tạo một ụ văn bản khụng xỏc định kớch thước: public TextField();

• Tạo một ụ văn bản hiển thị tối thiểu numCols ký tự: public TextField(int numCols);

• Tạo một ụ văn bản với nội dung là một chuỗi cho trước: public TextFiled(String initText);

• Tạo vựng văn bản:

• Tạo vựng văn bản rỗng, kớch thước bất kỳ: public TextArea();

• Tạo một vựng văn bản với nội dung cho trước: public TextArea(String initiaText); • Tạo một vựng văn bản với số cột và số dũng định trước: public TextArea(int rows,

int cols);

• Tạo một vựng văn bản với số dũng số cột và nội dung cho trước: public TextArea(String st, int rows, int cols)

Đặc điểm chung của cỏc thành phần văn bản: Hai lớp này được dẫn xuất từ lớp TextComponent

Muốn đưa nội dung văn bản vào cỏc đối tượng này ta sử dụng phương thức setText: public void setText(String newText);

Lấy nội dung văn bản trong cỏc đối tượng: public String getText(); Lấy nội dung văn bản được đỏnh dấu: public String getSelectedText();

Để xỏc định xem vị trớ đỏnh dấu khối văn bản bắt đầu và kết thỳc ở đõu: public int getSelectionStart(); //đầu

public int getSelectionEnd(); //cuối

Đỏnh dấu toàn bộ văn bản: public void selectAll();

Cho phộp soạn thảo được: public void setEditable(boolean canEdited); canEdited = false:

chỉ đọc.

canEdited = true: thờm, sử được.

Xỏc định đối tượng đang ở trang thỏi nào: public boolean isEditable();

Đặc điểm riờng của TextField:

Đặt ký tự hiển thị cho ký tự nhập vào: public void setEchoChar(Char ch); vớ dụ: myTextField.setEchoChar('*'); //mó mKhẩu

Xỏc định xem ký tự làm ký tự hiển thị: public char getEchoChar(); Xỏc định chiều dài của ụ văn bản theo ký tự: public int getColums(); Đặc điểm riờng của đối tượng TextArea:

Đưa thờm một dũng văn bản vào đối tượng: public void appendText(String newText); Chốn một chuỗi văn bản vào vị trớ bất kỳ: public void insertText(String newText, int pos); Xỏc định kớch thước hiển thị: public int getRows(); public int getColums();

Sử dụng đối tượng TextField và TextArea:

Muốn lấy nội dung văn bản của đối tượng, ta thiết lập ActionListener để gắn đối tượng xử lý tỡnh huống vào văn bản TextField. Khi người dung nhấn Enter thỡ tỡnh huống được gọi.

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

public class TextFieldTest extends JFrame {

private JTextField textField1, textField2, textField3; private JPasswordField passwordField;

// Thiết lập giao diện GUI public TextFieldTest() {

super( "Testing JTextField and JPasswordField" ); // constructor của JFrame Container container = getContentPane();

container.setLayout( new FlowLayout() );

// ụ nhập với kớch thước mặc định textField1 = new JTextField( 10 ); container.add( textField1 );

// ụ nhập với văn bản cú sẵn

textField2 = new JTextField( "Enter text here" ); container.add( textField2 );

// ụ nhập khụng cho phộp nhập, chỉ hiờn thị thụng tin textField3 = new JTextField( "Uneditable text field", 20 ); textField3.setEditable( false );

container.add( textField3 ); // ụ nhập password

passwordField = new JPasswordField( "Hidden text" ); container.add( passwordField );

// Đăng ký bộ lắng nghe sự kiện

TextFieldHandler handler = new TextFieldHandler(); textField1.addActionListener( handler ); textField2.addActionListener( handler ); textField3.addActionListener( handler ); passwordField.addActionListener( handler ); setSize( 325, 100 ); setVisible( true ); } // hàm main

public static void main( String args[] ) {

TextFieldTest application = new TextFieldTest();

application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }

// Lớp nội cho bộ lắng nghe sự kiện

private class TextFieldHandler implements ActionListener { // phương thức xử lý sự kiện

public void actionPerformed( ActionEvent event ) {

String string = "";

// khi người dựng ấn enter

if ( event.getSource() == textField1 )

string = "textField1: " + event.getActionCommand(); // user pressed Enter in JTextField textField2

else if ( event.getSource() == textField2 )

// user pressed Enter in JTextField textField3 else if ( event.getSource() == textField3 )

string = "textField3: " + event.getActionCommand(); // user pressed Enter in JTextField passwordField else if ( event.getSource() == passwordField ) {

JPasswordField pwd = ( JPasswordField ) event.getSource();

string = "passwordField: " + new String( passwordField.getPassword() ); }

JOptionPane.showMessageDialog( null, string ); // Hiờn thị cửa sổ thụng bỏo }

} }

III.8 Thanh trượt (Scrollbar)

Ta cú thể đặt thanh trượt cỏc giỏ trị giới hạn tối thiểu (min) và tối đa (max) cựng với vị trớ hiện tại trờn thanh trượt.

Khi người dựng kớch chuột vào mũi tờn ở hai đầu thỡ tỡnh huống line nảy sinh, thanh trượt sẽ tự động cộng thờm hay trừ đi một đơn vị.

Tỡnh huống page nảy sinh khi người dựng kớch chuột vào khoảng giữa thanh trượt, vị trớ hiện hành sẽ thay đổi.

Tỡnh huống absolute nảy sinh khi người dựng nắm vào vị trớ hiện hành của thanh trượt và kộo nú đi.

Đối tượng Scrollbar chỉ chịu trỏch nhiệm di chuyển và cung cấp cho ta giỏ trị thay đổi.

Tạo thanh trượt:

Phương thức khởi tạo: public Scrollbar();

Tạo thanh trượt đứng hay ngang ta dựng: public Scrollbar(int orienttation); orienttation nhận giỏ trị Scrollbat.VERTICAL - cho đứng, Scrollbar.HORIZONTAL cho nằm ngang.

Tạo thanh trượt cú đầy đủ thụng số ban đầu: public Scrollbar(int orienttation,

int pos, //vị trớ khởi đầu int pageUnit, //bước nhảy int minValue, //giỏ trị min int maxValue); //giỏ trị max

Một số phương thức hay dựng:

Thay đổi giỏ trị tăng giảm (mặc định là 1): public void setUnitIncrement(int increment); Muốn biết hiện thời tăng giảm bao nhiờu: public int getUnitIncrement()

Chỉ định con số khi tỡnh huống page xảy ra: pubic void setBlockIncrement(int b); Muốn biết hiện thời đơn vị thay đổi là bao nhiờu: public int getBlockIncrement(); Lấy giỏ trị lớn nhất và nhỏ nhất: public int getMaximum(); public int getMinimum(); Đặt lại vị trớ hiện hành cho thanh trượt: public void setValue(int newPos);

Cho ta vị trớ hiện hành: public int getValue();

Muốn biết thanh trượt đứng hay ngang: public int getOrientation() trả về giỏ trị là một trong hai hằng số Scrollbar.VERTICAL và Scrollbar.HORIZONTAL.

Thiết lập lại cỏc thụng số cho thanh trượt: public void setValues(int position, int pageUnit, int minimum, int maximum);

vớ dụ: myScrollbar.setValues(75, 10, 0, 500); Sử dụng thanh trượt:

Ta nhờ đối tượng xử lý tỡnh huống xử lý: public void adjustmentValueChanged(AdjustmentEvent evt);

Cú 3 trạng thỏi: line, page và absolute. Ta sử dụng hàm getAdjustmentType() để xỏc định xem tỡnh huống nào đang xảy ra.

AdjustmentEvent.UNIT_INCREMENT: tỡnh huống line xảy ra, vị trớ thanh trượt tăng 1 đơn vị.

AdjustmentEvent.UNIT_DECREMENT: tỡnh huống line xảy ra, vị trớ thanh trượt giảm 1 đơn vị.

AdjustmentEvent.BLOCK_INCREMENT: tỡnh huống page xảy ra, vị trớ hiện hành tăng 1 đv.

AdjustmentEvent.Track: tỡnh huống absolute xảy ra, ta lấy vị trớ thanh trượt bằng hàm getValue().

Một phần của tài liệu Bài giảng ngôn ngữ lập trình Java doc (Trang 115 - 126)