9.1 窗口
9.1.1 創(chuàng)建可關(guān)閉窗口
窗口所對應(yīng)的類為java.awt.Frame,它是java.awt.Window的子類,其常用方法:
方 法
功 能
返回
類型
Frame( )
創(chuàng)建一個初始不可見的窗口
void
Frame(String title )
創(chuàng)建一個指定標(biāo)題的初始不可見的窗口
void
setMenuBar(MenuBar mb)
設(shè)置菜單欄
void
remove(MenuComponent mc)
移除菜單欄
void
setVisible(boolean b)
設(shè)置是否可見
void
setTitle(String title)
設(shè)置標(biāo)題
void
setSize(int length,int width)
void
例:import java.awt.*;
import java.awt.event.*;
class Frame1 extends Frame{
public Frame1(){
//窗口構(gòu)造函數(shù),此例沒有調(diào)用父類構(gòu)造函數(shù)而是直接在子類中設(shè)置窗口屬性
Label l=new Label("HI"); //定義窗口中的標(biāo)簽
this.add(l); //在窗口中顯示標(biāo)簽
this.setSize(new Dimension(400,300)); //設(shè)置窗口大小
this.setTitle("My sceond Frame"); //設(shè)置窗口標(biāo)題 }}
public class SC{
boolean packFrame=false;
public SC(){
Frame1 frame=new Frame1();
frame.setVisible(true); }
public static void main(String args[])
{new SC();} }
9.1.2 窗口事件適配器
例P188
9.1.3 匿名類
例P189
9.1.4 在窗口中加入組件
例P190 import java.awt.*;
import java.awt.event.*;
public class SC extends Frame implements ActionListener{
Button btn1,btn2;
TextField f;
SC( ){
super("Window4"); //調(diào)用父類構(gòu)造函數(shù)創(chuàng)建標(biāo)題為Window4窗口
addWindowListener(new WindowAdapter(){
public void windowsClosing(WindowEvent e){
System.exit(0); }});
setSize(350,200);
btn1=new Button("顯示");
btn2=new Button("退出");
f=new TextField(20);
setLayout(new FlowLayout());
add(f);
add(btn1);
add(btn2);
btn1.addActionListener(this);
btn2.addActionListener(this);
show();// 改為setVisible(true);效果一樣
}
public static void main(String args[]){
new SC(); }
public void actionPerformed(ActionEvent e){
f.setText("你按下了“"+e.getActionCommand()+"”按鈕");
if (e.getSource()==btn2){
for (int i=0;i<1000000000;i++);
System.exit(0);
}}}
注:show或setVisible方法必須位于添加組件語句之后,否則組件顯示不出來
9.1.5 多重窗口
例P192
9.2 菜單
菜單與其他組件有所不同,無法直接將菜單添加到容器的某一位置,也無法使用布局管理器對其加以控制,菜單只能被添加到“菜單容器”中
1.菜單條(MenuBar)
是一個水平菜單,它只能被添加到Frame對象中,作為整個菜單樹的根基(容器),直接在由java.applet.Applet生成的小應(yīng)用程序中不能加入菜單,必須先創(chuàng)建窗口。
說明:Swing中的菜單類全部是從Jcomponent類繼承而來的,因此可以在任何Jcontainer(包括JApplet)中放置菜單的JmenuBar,而Applet中是不能直接加入菜單的。
Frame fr=new Frame(“菜單條示例”) ;
MenuBar mb=new MenuBar( );
fr.setMenuBar(mb);
fr.setSize(150,100);
fr.setVisible(true);
說明:菜單條(MenuBar)不支持Listener。因?yàn)樵谄渲兴l(fā)生的各種事件,將會自動由菜單項(xiàng)處理。
2.菜單(Menu)
Menu類提供了標(biāo)準(zhǔn)下拉菜單,它可以被添加到菜單條中或其他菜單中
Frame fr=new Frame(“菜單條示例”) ;
MenuBar mb=new MenuBar( );
fr.setMenuBar(mb);
Menu m1=new Menu(“File”);
Menu m2=new Menu(“Edit”);
Menu m3=new Menu(“Help”);
mb.add(m1); mb.add(m2);
mb.setHelpMenu(m3);//在界面上設(shè)置幫助菜單
fr.setSize(150,100);
fr.setVisible(true);
3.菜單項(xiàng)(MenuItem)
菜單項(xiàng)是菜單樹的“文本葉子”
Menu m1=new Menu(“File”);
MenuItem mi1=new MenuItem(“Save”); //創(chuàng)建“Save”的菜單項(xiàng)
MenuItem mi2=new MenuItem(“Load”);
MenuItem mi3=new MenuItem(“Quit”);
m1.add(mi1); m1.add(mi2);
m1.addSeparator( ); // 添加一條分隔線
m1.add(mi3);
4.復(fù)選框菜單項(xiàng)(CheckboxMenuItem)
Menu m1=new Menu(“File”);
MenuItem mi1=new MenuItem(“Save”);
CheckboxMenuItem mi2=new CheckboxMenuItem (“Load”);
//帶復(fù)選框的菜單項(xiàng)
m1.add(mi1); m1.add(mi2);
CheckboxMenuItem可以通過ItemListener接口進(jìn)行監(jiān)聽,當(dāng)復(fù)選框狀態(tài)發(fā)生變化后,itemStateChanged()方法將被調(diào)用
5.彈出式菜單項(xiàng)(PopupMenu)
彈出式菜單可以在任一組件上彈郵,同時也可以在彈出式菜單中添加菜單項(xiàng)和菜單。彈出式菜單必須被添加到某一“父”組件上
Frame fr=new Frame("PopupMenu");
Button b=new Button("Press Me");
fr.add(b);
PopupMenu p=new PoupMenu("Popup");
MenuItem s=new MenuItem("Save");
MenuItem l=new MenuItem("Load");
fr.add(p);
b.addActionListener(this);
p.add(s); p.add(l);}
如果想要顯示彈出式菜單,則需要調(diào)用show()方法,如本例使用一個按鈕作為觸發(fā)裝置,點(diǎn)擊按鈕就彈出該P(yáng)opuMenu
public void actionPerformend(ActionEvent e){
p.show(b,10,10);}
菜單總結(jié):
第一步:定義菜單欄MenuBar類的對象:
MenuBar 對象名=new MenuBar( );
第二步:定義菜單Menu類的對象:
Menu 對象名=new Menu(“菜單名”);
第三步:定義菜單項(xiàng)MenuIttem類的對象:
MenuItem 對象名=new MenuItem(“菜單項(xiàng)名”);
或定義選項(xiàng)子菜單CheckboxMenuItem類的對象:
CheckboxMenuItem 對象名=new CheckboxMenuItem(“選項(xiàng)名”);
第四步:在Frame中加入菜單欄:
Freme類對象名.setMenuBar(“MenuBar類對象名”);
第五步:在MenuBar中加入菜單:
MenuBar類對象名.add(“Menu類對象名”);
第六步:在Menu類的對象中加入菜單項(xiàng):
Menu類對象名.add(“MenuItem類對象名”);
或Menu類對象名.add(“CheckboxMenuItem類對象名”);
MenuBar類的常用成員方法:
public void MenuBar( ):構(gòu)造一個菜單欄
public Menu add(Menu m):將指定的菜單加入菜單欄
public void remove(int index):刪除指定位置上的菜單
public void remove(MenuComonent):刪除指定的菜單
Menu類的常用成員方法:
public void Menu():構(gòu)造一個菜單
public void Menu(String label):以指定標(biāo)簽構(gòu)造一個菜單
public MenuItem add(MenuItem mi):增加一個菜單項(xiàng)
public void add(String label):與add(new MenuItem(label))等價
public void remove(int index):刪除指定位置上的菜單項(xiàng)
public void remove(MenuComponent mc):刪除指定的菜單項(xiàng)
public void removeAll():刪除所有的菜單項(xiàng)
public void insert(MenuItem mi,int index):在指定位置處插入一菜單項(xiàng)
public void insert(String label,int index):在指定位置處插入一菜單項(xiàng)
public void insertSeparator(int index):在指定位置處插入一分隔符
MenuItem類的常用成員方法:
public void MenuItem( ):構(gòu)造一個菜單項(xiàng)
public void MenuItem(String label):以指定標(biāo)簽構(gòu)造一個菜單項(xiàng)
public void MenuItem(String label,MenuShortcut s):以指定標(biāo)簽和快捷鍵構(gòu)造一個菜單項(xiàng)
public void setLabel(String Label):設(shè)置菜單項(xiàng)標(biāo)簽
public void setShortcut(MenuShortcut s):設(shè)置快捷鍵
setActionCommand(String command):設(shè)置由菜單項(xiàng)引發(fā)的動作事件的命令字符串,命令字符串的默認(rèn)值為菜單項(xiàng)的標(biāo)簽
getActionCommnad():取得事件源的命令字符串
deleteShorcut():刪除與該菜單項(xiàng)相關(guān)的快捷鍵
setEnabled(boolean b):設(shè)置菜單項(xiàng)是否可選
例:
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
public class SC extends Applet{
MyFrame f=new MyFrame("My first Frame");
Button b1=new Button("Open");
Button b2=new Button("Close");
MenuBar mb1=new MenuBar();
Menu fi=new Menu("File");
MenuItem file[]={new MenuItem("Open",new MenuShortcut(KeyEvent.VK_O)),
//ctrl+S
new MenuItem("Save",new MenuShortcut(KeyEvent.VK_S)),
//設(shè)置快捷方法Ctrl+S
new MenuItem("Exit",new MenuShortcut(KeyEvent.VK_E))};
//Ctrl+E
public void init(){
add(b1);
add(b2);
f.setMenuBar(mb1);
mb1.add(fi);
for (int i=0;i<file.length;i++)
{fi.add(file[i]);}
b1.addActionListener(new b1L());
b2.addActionListener(new b2L());
f.setSize(200,300);}
class b1L implements ActionListener{
public void actionPerformed(ActionEvent e){
f.setVisible(true);}}
class b2L implements ActionListener{
public void actionPerformed(ActionEvent e){
f.setVisible(false);}}
class MyFrame extends Frame{
Label L1=new Label("My Applet Frame");
MyFrame(String s){
super(s);
add(L1); }}}
9.3 對話框
9.3.1 自定義對話框
Dialog構(gòu)造方法:
Dialog(Frame owner):在指定Frame中構(gòu)造一無標(biāo)題的、無模式的對話框
Dialog(Frame owner,boolean model):在指定Frame中構(gòu)造一無標(biāo)題的對話框,當(dāng)model為true時有模式(必須先處理對話框),model為false時無模式
Dialog(Frame owner,String title,boolean model):標(biāo)題為title,其他同上
Dialog(Dialog owner):在指定Dialog中構(gòu)造一無標(biāo)題的、無模式的對話框
Dialog(Dialog owner,boolean model):
Dialog(Dialog owner,String title,boolean model):
常用成員方法:
public void setTitle(String title):設(shè)置標(biāo)題
public void show():顯示對話框
public void hide():隱藏對話框
public void setVisible(boolean b):b為true顯示對話框,為false不顯示
例:import java.awt.*;
import java.awt.event.*;
class SC{
public static void main(String abc[]){
Frame f=new Frame("HI") ;
f.setSize(300,200);
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{System.exit(0);} //可關(guān)閉窗口
});
Dialog d=new Dialog(f,"HI",false);
d.setSize(100,150);
d.show(); }}
9.4 Swing簡介
Swing和AWT的最大差別在于Swing組件類不帶本地代碼,因此不受操作系統(tǒng)平臺的限制,具有比AWT組件更強(qiáng)的功能。
> Swing按鈕類和標(biāo)簽類除了顯示文本標(biāo)題外還可以顯示圖像標(biāo)題
> 可以為Swing容器加上邊框
> Swing組件能自動適應(yīng)操作系統(tǒng)的外觀,而AWT組件總是保持相同外觀
> Swing組件不一定非得是矩形的,可以把按鈕設(shè)計成圓形
> 可以調(diào)用Swing組件的方法心跡其外觀和行為
> 增加了一個豐富的高層構(gòu)件集合,如表格(JTable)、樹(JTree)
缺點(diǎn):慢
特點(diǎn):
> 類的屬性被命名為xxx,則相應(yīng)的的方法命名為:getXxx()、setXxx()、isXxx()
> Swing使用同AWT相同的事件模型。處理Swing中的事件時除了使用java.awt.event包外,還要用到j(luò)avax.swing.event包
> 大多數(shù)情況下在老的AWT組件前加一個“J”即為Swing組件
Swing組件的分類
> 頂層容器:包括JFrame、JApplet、JDialog、Jwindow
> 普通容器:包括JPanel、JScrollPane、JtablePane
> 特殊容器:包括JLayeredPane、JRootPane、JtoolBar
> 基本控件:JButton、JCombox、JList、JMune、JTextFiled等
> 不可編輯信息組件:如JLabel、JprogresserBar
> 可編輯信息組件:如JTextFiled、JTree、JFileChooer、JTable
9.4.1 Swing按鈕與標(biāo)簽
1.按鈕(JButton)
構(gòu)造方法:
Jbutton():構(gòu)造一個沒有標(biāo)簽和圖標(biāo)的按鈕
Jbutton(Icon icon):構(gòu)造一個帶有圖標(biāo)的按鈕
Jbutton(Sting text):構(gòu)造一個帶有標(biāo)簽的按鈕
Jbutton(Sting text,Icon icon):構(gòu)造一個帶有標(biāo)簽和圖標(biāo)的按鈕
主要成員方法:
public boolean isDefaultButton():返回這個按鈕是否為RootPane的默認(rèn)按鈕
setIcon(Icon icon):設(shè)置按鈕圖標(biāo)
setDisableIcon(Icon icon):設(shè)置按鈕不激活時顯示圖標(biāo)
setRolloverIcon(Icon icon):設(shè)置鼠標(biāo)移到按鈕上的圖標(biāo)
setPressedIcon(Icon icon):設(shè)置鼠標(biāo)按下的圖標(biāo)
2.標(biāo)簽(JLabel)
構(gòu)造方法:
JLabel(Icon icon):構(gòu)造一個帶圖片的標(biāo)簽
JLabel(Icon icon,int horizontalAlignment):構(gòu)造一個帶圖片且水平對齊的標(biāo)簽
JLabel(String text):構(gòu)造一個帶文本的標(biāo)簽
JLabel(String text,int horizontalAlignment):構(gòu)造一個帶文本且水平對齊的標(biāo)簽
JLabel(String text, Icon icon ,int horizontalAlignment):構(gòu)造一個帶文本圖片且水平對齊的標(biāo)簽
主要成員方法:
getIcon():獲取JLabel顯示的圖像對象
setIcon(Icon icon):設(shè)置需要顯示的圖像
getText():返回Jlabel標(biāo)簽顯示的字符串
setText(String text):設(shè)置需要顯示的字符串
getHorizontalAlignment():返回沿X軸的標(biāo)簽內(nèi)容的對齊方式
setHorizontalAlignment():設(shè)置沿X軸的標(biāo)簽內(nèi)容的對齊方式
getVerticalAlignment():返回沿Y軸的標(biāo)簽內(nèi)容的對齊方式
setVerticalAlignment():設(shè)置沿Y軸的標(biāo)簽內(nèi)容的對齊方式
9.4.2 Swing工具欄(JToolBar)
作為一個容器來包容任何組件,它支持拖運(yùn)
構(gòu)造方法:
JToolBar():構(gòu)造一個工具欄
JToolBar(int orientation):構(gòu)造一個指定方向的工具欄
主要成員方法:
addSeparator():在JToolBar的末尾增加一個分割符
addSeparator(Dimension size):在JtoolBar的末尾增加一個指定寬度分割符
getComponentAtIndex(int i):返回指定索引的組件
getComponentAtIndex(Component c):返回指定組件的索引
getOrientation():返回工具欄的方向
setOrientation(int o):設(shè)置工具欄的方向
remove(Component comp):從工具欄中刪除組件
setBorderPainted(boolean b):設(shè)置邊界是否可被畫