Khung chứa Dialog

Một phần của tài liệu Chatting program (Trang 38 - 49)

Khung chứa tiếp theo mà ta xem xét là Dialog, khung chứa này cũng là một cửa sổ nh Frame, nhng cửa sổ này ít chức năng hơn, nó còn đợc gọi là pupop-window. Ta có thể tạo ra Dialog dới hai hình thức là modal và non- modal.

Modal là các cửa sổ Dialog khi hiện ra sẽ khoá chặt các cửa sổ khác lại. Ngời dùng không thể nào tơng tác đợc với các cửa sổ còn lại của chơng trình trừ khi đóng lại cửa sổ Dialog lại. Những cửa sổ dạng modal này thờng yêu cầu một tác vụ nào đó cần phải hoàn thành trớc khi chuyển sang tác vụ tiếp theo. Các cửa sổ mà ta thờng thấy trong những chơng trình windows nh thông báo lỗi, những cửa sổ chọn lựa thuộc loại này.  Non-modal thì ngợc lại, những cửa sổ dạng này thích hợp cho các thao

tác mang tính tuỳ biến (Customize), ít ảnh hởng đến các tác vụ chính. Ngời dùng vẫn có thể tơng tác với các ứng dụng chính khi cửa sổ non- modal đng hiện hữu. Một ví dụ là những cửa sổ mang chức năng tìm kiếm (search dialog) chẳng hạn.

Một cửa sổ (hay khung chứa) Dialog phải đợc gắn với cửa sổ chính Frame. Một Dialog không thể đợc gắn với Applet, tuy nhiên nếu trong Applet ta tạo ra đối tợng Frame và gắn cửa sổ Dialog vào đó thì vẫn đợc. Ta tạo cửa sổ Dialog từ phơng thức khởi dựng cửa lớp Dialog nh sau:

public Dialog (Fram parentWindow, boolean isModal)

đối số isModal quyết định xem Dialog đợc tạo ra ở dạng nào, modal (isModal bằng true) hay non-Modal (isModal bằng false).

Một khi đã xác nhận hình thức cho Dialog khác. Ví dụ sau sẽ tạo ra cửa sổ Dialog thuộc dạng modal dành cho cửa sổ ứng dụng chính là myWindow (thuộc lớp Frame):

Dialog myDialog = new Dialog(myWindow, true)

Cũng nh đối với cửa sổ Frame, cửa sổ Dialog vẫn có một tiêu đề, ta có thể tạo ra Dialog với một tiêu đề định trớc bằng phơng thức sau:

public Dialog (Frame parentWindow, String Title, boolean isModal)

Sau khi ta đã tạo xong đối tợng Dialog việc còn lại là đa chúng ra màn hình bằng phơng thức show( ). Ví dụ myDialog. show( ).

Để dấu cửa sổ Dialog đi ta gọi phơng thức hide( ). Ví dụ myDialog. hide( ). hoặc setVisible (boolean).

Các đặc điểm cửa khung chứa Dialog

Các đặc điểm thờng dùng của đối tợng Dialog thể hiện tơng tự nh đối t- ợng Frame qua các phơng thức sau:

//Cho phép và lấy tình trạng đợc quyền thay đổi kích thớc cho Dialog public setResizable (boolean)

boolean isResizable ( )

//Đặt và lấy tiêu đề của Dialog

void setTitle (String) String getTitle( )

Nếu muốn xác minh một Dialog đang thuộc dạng nào ta có thể gọi phơng thức:

public boolean isModal ( )

2.16.Khung chứa ScrollPane

Khung chứa này không phải là cửa sổ, nó chỉ có tính chất nh khung chứa Panel dùng để chứa các đối tợng con mà thôi, Tuy nhiên một tính chất đặc biệt của ScrollPane là những đối tợng con mà nó chứa quá lớn nh khung hình chẳng hạn thì ScrollPane sẽ xuất hiện thanh trợt đứng và ngang ở hai bên viền để ta có thể xem đợc toàn bộ đối tợng mà nó chứa.

Khi ta đa một đối tợng vào khung chứa (container) thì các khung chứa phải có trách nhiệm sắp xếp chỗ và định vị trí cho các đối tựng con của nó. Khung chứa chuyển giao bổn phận này cho một đối tợng khác thực hiện, đó là Layout. Việc để cho các đối tợng con đợc sắp xếp theo một trình tự tổng quát nào đó là rất cần thiết khi ta phải di chuyển chơng trình qua nhiều môi trờng hệ điều hành khác nhau, nhiều màn hình với độ phân giải khác nhau. Th viện AWT cung cấp 5 cách sắp xếp trình bày do các bộ đối tợng sau thực hiện:

 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 đều giữ nguyên kích thớc của mình.

 GridLayout : Tạo một khung lới vô hìnhvới các ô bằng nhau. các đối t- ợng sẽ đặt vừa kích thớc với từng ô đó. Thứ tự sắp xếp cũng từ trái qua phải từ trên xuống dới.

 BorderLayout : Các đối tợng đợc đặt theo các đờng viền của khung chứa theo các cạnh West, East, South, North và Center ( có nghĩa là đông tây nam bắc và trung tâm hay phải trái trên dới và giữa tuỳ theo cách nhìn của ta).

 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 tựa nh những lá bài (card) trong bộ bài tây. Nh vậy ta chỉ có thể thấy đợc một đối tợng mà thôi, các đối tợng nằm bên dớia sẽ bị che khuất.

 GridBagLayout : Đây là cách trình bày uyển chuyển nhng cũng dễ gây nhầm lẫn nhất. 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 (Tơng tự nh GridLayout) thế nhng kích thớc các đối tợng không nhất thiết phải vừa với một ô mà có thể từ hai đến ba ô hay nhiều hơnm tuỳ theo các ràng buộc mà ta chỉ địng bằng GridBagConstraint.

Muốn áp dụng cách trình bày nào đối với khung chứa ta chỉ việc tạo ra một trong các đối tợng trên rồi chuyển nó vào khung chứa. Ví dụ để áp dụng cách bố trí kiểu FlowLayout đối với khung chứa myWindow ta làm nh sau:

FlowLayout objectsLayout = new FlowLayout ( ); myWindow.setLayout (objectsLayout);

Hay ta có thể viết ngắn gọn hơn là:

myWindow.setLayout (new FlowLayout( ));

Cách trình bày FlowLayout

Đối tợng FlowLayout sắp xếp các đối tợng con trong hkung chứa thành nhiều hàng (rows) khác nhau. Các đối tợng đợc lần lợt đặt vào hàng theo thứ tự từ trái qua phải, chỉ chiều dài không còn đủ chỗ nữa thì đối tợng tiếp theo sẽ đợc đặt xuống hàng mới. Theo cách này chiều dài của mỗi đối tợng

không bi ràng buộc phải thay đổi, các đối tợng có thể đợc canh lề trái hoặc lề phải hoặc ở giữa trên cùng một hàng so với hai biên của khung chứa. Giá trị canh lề mặc định cho cách trình bày này là canh ở giữa (center align).

Cách tạo đối tợng FlowLayout này cũng rất đơn giản. Ta có thể dùng phơng thức khởi dựng của đối tợng FlowLayout nh sau:

public FlowLayout ( )

Hoặc chỉ định luôn cách căn lề trái bằng phơng thức khởi dựng thứ hai là:

public FlowLayout (int align)

Các đối số của align là FlowLayout.LEFT, FlowLayout.RIGHT, Flowlayout.CENTER.

Mặt khác cũng có thể chỉ ra khoảng cách giữa các đối tợng trên cùng một hàng và giữa các hàng bằng cách dùng phơng thức sau:

public Flowlayout (int align, int hgap, int vgap)

Cách trình bày GridLayout

Đối tợng GridLayout sắp xếp các đối tợng con trong khung chứa thành nhiều ô có kích thớc đồng đều nhau. Các đối tợng đợc lần lợt đặt vào các ô trên một hàng theo thứ tự từ trái qua phải và từ trên xuống dới. Vì vậy khi tạo bộ quản lý cách trình bày theo kiểu GridLayout ta cần chỉ định rõ số hàng và số cột của khung lới vô hình mà những đối tợng con trong khung chứa sẽ đợc sắp xếp vào đó.

public GridLayout (int Rows, int Cols)

Đôi khi GridLayout tự tính lấy số hàng và số cột cần thiết ví dụ ta cso 6 đối tợng con trong khung chứa và bộ quản lý GridLayout của ta đợc tạo ra nh sau:

GridLayout layout = new GridLayout (3 , 0);

ta chỉ định 3 hàng bởi vì có 6 đối tợng cần sắp xếp theo 3 hàng và 2 cột. Chơng trình cũng có thể xác định khoảng cách giữa các đối tợng khi tạo bộ quản lý layout nh sau:

public GridLayout (int Rows, int Cols, int hgap, int vgap)

Cách trình bày BorderLayout

Đối tợng BorderLayout sắp xếp các đối tợng con trong khung chứa theo một thứ tự hơi đặc biệt một chút đó là đối tợng sẽ đợc đặt theo các đờng viền của khung chứa (border). Có nghĩa là theo các cạnh của khung. Java định vị các cạnh này là West, East, South, North và Center( có nghĩa là đông tây nam bắc và trung hay trái phải trên dới và giữa tuỳ theo cách nhìn của ta). Đối tợng sẽ đợc kéo dãn chiều dài cho vừa với đờng viền khung chứa. Tạo bộ quản lý theo kiểu BorderLayout này rất đơn giản:

public BorderLayout ( )

Ví dụ để định cách trình bày các đối tợng theo BorderLayout cho khung chứa myWindow ta làm nh sau:

myWindow.setLayout (new BorderLayout ( ))

Khi đa một đối tợng con vào khung chứa ta phải cho biết đối tợng đó sẽ đợc đặt theo cạnh nào của khung. Ví dụ muốn tạo một nút nhấn và đặt nó theo cạnh trên của khung chứa myWindow ta làm nh sau:

myWindow. add(“North”, new Button(“on Top”))

Cách trình bày GridBagLayout

Cách trình bày theo kiểu GridBagLayout cũng tơng tự nh kiểu GridLayout nghĩa là các đối tợng sẽ đợc định vị trong các ô (cell) có kích thớc đều của một khung lới vô hình. Tuy nhiên không nh GridLayout chỉ đặt chọn đối tợng trong một ô, GridBagLayout cho phép ta chỉ định kích th- ớc của đối tợng sẽ chiếm bao nhiêu ô và đặt ở vị trí nào trong khung lới. Số ô mà một đối tợng chiếm giữ đợc gọi là vùng trình bày (display area) dành riêng cho đối tợng đó, chẳng hạn đối tợng của ta chiếm 4 ô trong khung lới thì nội trong vùng (display area) của 4 ô đó ta có thể đặt đối tợng theo hớng trên dới trái phải ngang dọc gì là tuỳ ý. Để thực hiện đợc điều này trớc khi đa một đối tợng con vào khung chứa container nào đó ta cần để chỉ định những ràng buộc (constraint) mà đối tợng con cần phải tuân theo để đảm bảo nó đợc đặt vào đúng vị trí và theo kích thớc quy định. Công việc này đ- ợc thực hiện thông qua đối tợng GridBagConstraints. GridBagConstraints sẽ cung cấp cho ta hàng tá lựa chọn để ràng buộc một đối tợng con về vị trí và kích thớc trong khung chứa.

Điều quan trọng khi làm việc với GridBagLayout là ta hãy hình dung khung chứa nh một khung lới với các ô đều nhau có hoành độ và tung độ hẳn hoi. Nh vậy sẽ dễ dàng định vị và bố trí các đối tợng con của mình hơn.

Cách trình bày tự do (null layout)

Khi áp dụng null cho việc sắp xếp các đối tợng trong khung chứa cũng đồng nghĩa với việc ta phải tự động làm lấy tất cả, từ việc định kích thớc đến từng vị trí toạ độ chính xác trên màn hình cho đối tợng. Ta không cần phụ thuộc vào bất cứ ràng buộc đông tây nam bắc nào cả. Tuy hơi cực nh- ng có lẽ đây là cách ta cảm thấy ít gò bó nhất, để áp dụng cách trình bày null cho khung chứa, thay vì tạo ra một bộ quản lý nào đó rồi gắn vào khung chứa, đơn giản ta chỉ cần làm nh sau:

setLayout (null );

Các phơng thức thờng đợc sử dụng để định kích thớc và toạ độ cho đối tợng con là:

//định vị trí của đối tợng trong khung chứa thông qua đối tợng point

//định kích thớc của đối tợng trong khung chứa thông qua đối tợng //Dimension

public void setSize (Dimension d)

//định vị trí cùng kích thớc đối tợng trong khung chứa thông qua đối t- ợng //Rectangle

public void setBounds (Retangle r)

Phơng thức chung của các thành phần thuộc th viện AWT

Các phơng thức cơ bản nhất đợc cài đặt trong lớp Component:

Nếu ta muốn thay đổi màu nền (background) hay mầu chữ (foreground) cho các đối tợng hãy gọi phơng thức:

public void setBackground (Color c) //đặt màu nền public void setForeground (Color c) //đặt màu chữ

Muốn xem một đối tợng đang mang màu gì ta có thể ta có thể gọi 2 phơng thức ngợc nhau:

public Color getBackground ( ) // lấy màu nền public Color getForeground ( ) // lấy màu chữ

Để hiển thị hay tạm giấu đối tợng đi ta có thể gọi:

public void setVisible (boolean isShowed)

isShowed = true nếu ta muốn hiển thị đối tợng và false nếu ta muốn đối t- ợng bị dấu đi

Để thay đổi Font hiển thị cho các đối tợng ta có thể gọi phơng thức setFont:

public void setFont (Font f)

Muốn xem một đối tợng đang áp dụng Font gì ta có thể gọi phơng thức:

public Font getFont ( )

Lớp Component cũng cung cấp cho ta khả năng lấy những thông tin về kích thớc của đối tợng Font đang đợc sử dụng:

public FontMetrics getFontMetrics (Font f)

Xác định vị trí và kích thớc của các đối tợng

Kích thớc và vị trí của đối tợng thờng do các bộ quản lý trình bày (layout manager) quyết định. Tuy nhiên có những trờng hợp ta có thể tự định lấy kích thớc cho đối tợng:

// Định vị cho đối tợng

public void setLocation (Point p)

// Lấy vị trí của đối tợng

public void setSize (Dimension d)

// Lấy kích thớc

public Dimension getSize ( )

// Định vị trí và kích thớc

public void setBounds (Retangle r)

// Lấy vị trí và kích thớc

public Retangle getBound ( )

//Tìm đối tợng con ở toạ độ p(x,y) trong khung chứa container

public Component getComponentAt (Point p)

Phơng thức này giúp ta tìm ra một đối tợng con trong khung chứa ở tại một vị trí nào đó

Các tình huống chung xảy ra cho những đối tợng dẫn xuất từ lớp Component

public void addComponentListener (ComponentListener 1) public void addFocusListener (FocusListener 1)

public void addKeyListener (KeyListener 1) public void addMouseListener (MouseListener 1)

public void addMouseMotionListener (MouseMotionListener 1)

3.Lập trình với JFC

3.1.Giới thiệu về JFC (Java Foundation class)

Câu hỏi đầu tiên phải trả lời là “tại sao ta lại cần đến JFC?”, mục đích và u điểm của JFC là gì khi đem vào áp dụng và thiết kế cho chơng trình Java.

Ta biết rằng thiết kế giao diện đồ họa cho các trờng trình ứng dụng chủ yếu các đối tợng trong th viện AWT mà ta đã nghiên cứu trong chơng lập trình giao diện. Tuy nhiên hầu hết các đối tợng của th viện AWT chỉ đợc xây dựng sao cho phù hợp với từng hệ điều hành, nghĩa là khi tạo một nút nhấn trong một ứng dụng nào đó cho môi trờng Microsoft Window ta sẽ thấy hình dáng của nó khác với khi chạy trên mội trờng Window Solaris của Sun.

JFC là những lớp đợc thiết kế và đóng gói theo mô hình hớng đối tợng, nó cho phép chơng trình chạy tơng thích trên nhiều hệ điều hành Window khác nhau không những thế nó còn cho phép thay đổi cách nhìn ngay trên một hệ điều hành Window duy nhất

3.2.Khung chứa đa tầng (Multi-layering)

Lớp JFrame của th viện JFC là một khung chứa tơng tự nh lớp Frame của th viện AWT, chỉ khác một điều JFrame là một khung chứa bao gồm

nhiều tầng, tầng thờng dùng nhất là ContentPane, tầng này dùng để đa các thành phần đối tợng nh nút nhấn, nhãn danh sách..

Theo cơ chế đa tầng một khung chứa JFrame có thể sắp đặt các đối t- ợng con theo vị trí không gian 3 chiều không còn bị hạn hẹp ở vị trí theo toạ độ phẳng nh trớc đây khi dùng đối tợng Frame cũ của th viện AWT. Bằng cách này tầng Content của khung chứa nằm sau cùng nên các đối t- ợng ở tầng khác có thể hiện lên và tạm thời che khuất các đối tợng ở tầng Content để thực hiện một vài chức năng đặc biệt nào đó, chẳng hạn tầng MenubarPane dùng để trình bày và sắp đặt các đối tợng trình đơn Menu, tầng GlassPane ngoài cùng dùng cho việc thể hiện các thông điệp kiểu ToolTips (dùng mô tả ngắn gọn các chức năng của các đối tợng con khi ng- ời dùng di chuyển chuột vào đối tợng đó) các tầng đợc xem nh những tấm kính trong suốt xếp chồng lên nhau và nằm trọn trong khung chứa JFrame

3.3.Các thành phần JFC 3.3.1.Nhãn (JLabels)

JLabel không chỉ dùng cho văn bản mà còn đợc sử dụng trong hình ảnh các cấu trúc của nó nh sau:

Tạo một nhãn không có hình ảnh không có tiêu đề:

public JLabel ( )

Tạo nhãn với hình ảnh xác định:

public JLabel (Icon image)

Tạo nhãn với hình ảnh xác định và hớng căn lề, tham số horizontalAlignment có thể là LEFT, CENTER, RIGHT trong giao tiếp SwingConstants:

public JLabel (Icon image, int horizontalAlignment)

Ba phơng thức sau tơng tự nh trên với tiêu đề là text:

public JLabel (String text)

public JLabel (String text, Icon icon, int horizontalAlignment) public JLabel (String text, int horizontalAignment)

Biểu tởng trong JLabel hoặc là xác định trong khi tạo hoặc là thiết lập sau bằng cách sử dụng phơng thức setIcon.

public void seticon(Icon icon)

Trớc khi sử dụng phơng thức này một icon có thể đợc tạo bằng câu lệnh:

Icon icon = new ImageIcon(filename);

tạo nên một biểu tợng với file hình ảnh xác định qua tham số filename. Phơng thức getText( ) trả về xâu ký tự mà JLabel trình bày

Phơng thức setText ( ) hiển thị một dòng ký tự trong Jlabel

public void setText ( )

Xâu ký tự trong JLabel có thể căn dọc bằng cách sử dụng phơng thức setVerticalAlignment( ):

public void setVerticalAlignment (int alignment)

Trong đó tham số alignment có thể là TOP, CENTER (ngầm định ) hoặc BOTTOM.

3.3.2.Nút nhấn (JButton):

Cấu trúc:

Tạo nút nhấn không có hình ảnh và ký tự

public JButton ( )

Một phần của tài liệu Chatting program (Trang 38 - 49)

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

(79 trang)
w