java GUI
12.25!~12.27
GUI
1 容器,部件
2 事件處理
awt和swing的特點:
awt(抽象窗口工具集)是依賴操作系統的GUI.
能夠顯示出來的組件是不同操作系統的共有組件.(但是不太好看.)
swing(模擬GUI組件)速度比awt要慢的多.
swt(sun公司的,是swing和awt的綜合體)如果swt產生的組件awt有就直接調用, 沒有就模擬出來.這樣既解決了跨平臺的問題,也解決了速度慢的問題.
低層容器:容器是包含其他組件的組件.
JFrame,JApplet,JDialog.?
布局管理器:
標準布局,自由布局.
GUI三個步驟:
1.選擇容器
2.為容器設置布局方式
3.為容器填加組件
導入3個包
import javax.swing.*;
import java.awt.*;
import awt.event.*;
GUI底層容器的實現方式
第一種:
JFrame jf = new JFrame();? //拿一個容器
jf.setLayout(null);???????
JButton jb = new JButton();
jb.setBounds(0,0,20,20);? //絕對布局
jf.add(jb);
this.setSize(200,200);
this.setVisible(true);
第二種:
類 extends JFrame?? //讓自己的類變成容器
申明組件;
public 類
{
?Container ct = this.getContentPane();
?ct.add();
?this.setSize();
?this.setVisible();
}
this.setCursor(new Cursor(Cursor.HAND_CURSOR));? //變手
Image image = new ImageIcon("Sunset.jpg").getImage();
setIconImage(image);//改變圖標
容器,根容器,部件看gui資料? E盤..
布局管理器
FlowLayout 面板(缺省管理器) 流布局管理器
在setLayout(null)下全是FlowLayout
BorderLayout JFrame(缺省布局管理器) 東 西 南 北 中
GridLayout 行列(像表格)
CardLayout 卡片布局管理器(沒有頁簽)
GridBagLayout 格蘭包布局管理器(標準管理器中最靈活的,不好把控)??
FlowLayout 從上到下,從左到右放置.
1.當第一行沒有排滿時,會把第一行排滿再排下一行.
2.不管布局管理器是否改變,組件大小都不會改變.
FlowLayout folw = new FlowLayout (FlowLayout.LEFT);
3.在缺省狀態下從中部開始.
BorderLayout
當東西南北任何一個地區沒放置任何組件時,中部區域會把周圍的區域侵略掉.
setLayout(new BorderLayout());
組件會隨著容器大小的變化而變化.
add("North",組件); 不好用
add(組件,BorderLayout.NORTH); 清晰
GridLayout
組件會隨著容器大小的變化而變化.
setLayout(new GridLayout(3,2));? 行列
add(new Button("first",0));
根據序列依次填進去,只有列滿了才去填行.
validate();? 讓容器刷新
GardLayout
GardLayout card = new GardLayout();
setLayout(card);
add("1",new Button(""));
CardLayout cl = (CardLayout)cardLayout.getLayout;
cl.show(cardLayout,"card1");
事件
class 類 extends JFrame implements(實現) ActionListener(接口)
{????????????????????? (受托事件處理)
?????????????????????? 不同的事件不同的部門處理
}
1 讓類變成監聽者
2 賦予多少職責就實現多少
3 建立部件與監聽者的關系
jb.addActionListener(this);
?
CardLayout cl = (CardLayout)card.getLayout();
String s = e.getActionCommed();
if(s.equals("上一步"))
{
?cl.show(card,"card2");
?????? ?或者
??????? cl.previous(card);
?button.setEnabled(false);
}
else if(s.equals("下一步"))
{
?cl.show(card,"card1");
?????? ?或者
??????? cl.previous(card);
?button.setEnabled(false);
}
?
?
?
?
?
?
?
?
?