kiem tien, kiem tien online, kiem tien truc tuyen, kiem tien tren mang
Monday, December 17, 2012


Tìm hiểu  về những thành phần của pane

Có 3 lớp container ở mức top-level  là : JFrame, JDialog và JApplet.
Mọi thành phần của GUI xuất hiện trên màn hinh phải nằm trong cấp của container.
Một cấp của container là một cây các thành phần mà có top-level container như gốc của nó.
Mọi top-level container có một content panemà nó chứa tất cả các thành phần xuất hiện trong giao diện container của người dùng.
Content pane có thể chứa các thành phần như: Jbutton, hoặc cũng có thể là các container khác, lúc đó container coi như các thành phần.
Sơ đồ mối quan hệ giữa một Jframe, root của nó, content và glass panes.

Jframe ->  Root pane -> ( Menu bar, Content pane)
Content pane -> Glass pane

Bất cứ khi nào bạn tạo ra một Jframe ( hay một top-level container), bạn có thể có một tham chiếu đến content pane của nó sử dụng phương thức -getContnetPane()  method.  
Bạn có khả năng này bởi vì ta có những chuyển đổi ( convert) tự động: add(), remove(), và setLayoutManager()
Ví dụ:
add(aButton);
getContentPane().add(aButton);

Mặc dù ban không càn lo lắng về content pane nếu bạn chỉ thêm component, xóa component, hoặc thiết lập layout manager  của một Jframe, bạn phải dựa vào content pane cho tất cả các hoạt động khác, như thiết lập màu nền ( backround color).

Khi bạn viết một ứng dụng để thêm nhiều component đến một content pane, nó thì hiệu quả để khai bảo một đối tượng thực hiện content pane hơn là việc cứ gọi getContentPane()  method. Cho ví dụ:

getContentPane().add(button1);
 getContentPane().add(button2);
getContentPane().add(button3);

Thay vào đó, bạn có thể viết:
Container con = getContentPane();
con.add(button1);
con.add(button2);
con.add(button3);








package contentpane;

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class JFrameWithExplicitContentPane extends JFrame{
private final int SIZE = 180; // Size of pane
private final int FRAME_X_ORIGIN = 250;
private final int FRAME_Y_ORIGIN = 250;
// private Container con = getContentPane(); // make a container
private JButton button = new JButton("Press me"); // make a button what's name is "Press me"

public JFrameWithExplicitContentPane(){
super("Frame"); //Container's name is "Frame"
setSize(SIZE,SIZE); // set the size of container
setLocation(FRAME_X_ORIGIN,FRAME_Y_ORIGIN);
setVisible(true); //You can see the container
setLayout(new FlowLayout()); //Make a new layout for container
add(button); // add a button into container
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args){
JFrameWithExplicitContentPane frame = new JFrameWithExplicitContentPane();
}
}


Một vấn để phát sinh khi bạn muốn sử dụng các phương thức khác hơn add(), remove, hoặc setLayout().

Cho một ví dụ, hãy nhìn vào class trong ví dụ, trong class này getContentPane() thì không được gọi.


package contentpane;

import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class JFrameWithoutExplicitContentPane extends JFrame {
private final int SIZE = 180;
private final int JFRAME_X_ORIGIN = 250;
private final int JFRAME_Y_ORIGIN = 250;
private JButton button = new JButton("Press Me");

public JFrameWithoutExplicitContentPane(){
super("Frame");
setSize(SIZE,SIZE);
setLocation(JFRAME_X_ORIGIN,JFRAME_Y_ORIGIN);
setVisible(true);
setLayout(new FlowLayout());
add(button);
setBackground(Color.BLUE); // DON'T DO IT
//The setbackground() call has no effect
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false); // Don't allow user to change the size of frame
}

public static void main (String args[]){
JFrameWithoutExplicitContentPane frame = new
JFrameWithoutExplicitContentPane();
}
}


ð Khi  chương trình thực thi, màu nền không chuyển sang màu xanh, giống như khi setBackground() không được gọi. Đó là bởi vì mặc dù màu nền của Jframe đã được thiết lập màu xanh, nhưng nội dung của pane thì không thay đổi.

Ta lại có một vi dụ tương tự ví dụ đã cho, nhưng trong ví dụ này màu nền của pane được thay đổi.


package contentpane;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class JFrameWithExplicitContentPane2 extends JFrame {
private final int SIZE = 180;
private final int JFRAME_X_ORIGIN = 250;
private final int JFRAME_Y_ORIGIN = 250;
private Container con = getContentPane();
private JButton button = new JButton("Press Me");

public JFrameWithExplicitContentPane2(){
super("JFrame");
setSize(SIZE,SIZE);
setLocation(JFRAME_X_ORIGIN,JFRAME_Y_ORIGIN);
setVisible(true);
con.setLayout(new FlowLayout());
con.add(button);
con.setBackground(Color.BLUE);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
}

public static void main(String[] args){
JFrameWithExplicitContentPane2 frame = new
JFrameWithExplicitContentPane2();
}


}


>>>NOTE:  
1.     Mọi component Java có một content pane mà chứa tất cả các thành phần mà người sử dụng có thể nhìn thấy.

2.     Bất cứ khi nào bạn tạo ra một Jframe, bạn có thể có một tham chiếu đến content pane  của nó bằng việc sử dụng phương thức getContentPane().

3.     Khi bạn thay đổi màu nền của một một Jframe ( background), bạn nên thay đổi màu của content pane, không phải màu của Jframe.


0 comments:

Post a Comment

domain, domain name, premium domain name for sales

Popular Posts