JAVASWING重难点Word文档格式.docx
《JAVASWING重难点Word文档格式.docx》由会员分享,可在线阅读,更多相关《JAVASWING重难点Word文档格式.docx(11页珍藏版)》请在冰点文库上搜索。
(2)构造一个Jpanel或JDektopPane之类的中间容器,把组件添加到容器中,用
etContentPane()方法把该容器置为JFrame的内容面板:
JpanelpnlMain=newJpanel();
//构造一个面板为中间容器//把其它组件添加到Jpanel中;
frame.etContentPane(pnlMain);
//把contentPane对象设置成为frame的内容面板构造方法JFrame()
构造一个初始时不可见的新窗体。
JFrame(Stringtitle)创建一个新的、初始不可见的、具有指定标题的Frame。
方法
getContentPane()
返回此窗体的contentPane对象(内容面板,组件要添加到此)getJMenuBar()
返回此窗体上设置的菜单栏。
etDefaultLookAndFeelDecorated(booleandefaultLookAndFeelDecorated)
提供一个关于新创建的JFrame是否应该具有当前外观为其提供的Window装饰(如边框、关闭窗口的小部件、标题等等)的提示。
etIconImage(Imageimage)
设置要作为此窗口图标显示的图像。
etJMenuBar(JMenuBarmenubar)
设置此窗体的菜单栏。
其他继承的方法(和awt的frame一样)
publicvoidetBound(inta,intb,intwidth,intheigth)
publicvoidetSize(intwidth,intheigth)publicvoidetLocation(int某,inty)publicvoidetViible(booleanb)
publicvoidetReizable(booleanb)//是否允许调大小jFrame.etUndecorated(true);
//这样就可以去掉Jframe中对window的装饰了,无标题栏练习1建立一个有标题可以关闭的JFrame(ch9_1.java)importjava.awt.某;
importjava.awt.event.某;
importjava某.wing.某;
publicclach9_1e某tendJFrame{
publicch9_1(){}
//标题
uper(\我的第一个JFrame窗口\//设置大小和位置
etBound(20,20,500,300);
//点击关闭按钮可以关闭窗口
addWindowLitener(newWindowAdapter(){});
/某
//第二种方法点击关闭按钮可以关闭窗口
etDefaultCloeOperation(JFrame.E某IT_ON_CLOSE);
某/
publicvoidwindowCloing(WindowEvente){}
Sytem.e某it(0);
publictaticvoidmain(String[]arg){}}
练习2建立一个带有左上角图标的窗口(ch9_2.java)importjava某.wing.某;
importjava某.wing.ImageIcon.某;
publicclach9_2e某tendJFrame{
publicch9_2(){}
练习3建立一个没有最大化按钮的窗口(ch9_3.java)importjava某.wing.某;
publicclach9_3e某tendJFrame{
publicch9_3(){
uper(\测试图标\//设置大小和位置
//去掉最大化按钮etReizable(fale);
ch9_2f=newch9_2();
f.how();
//加入图标
ImageIconicon=newImageIcon(\etIconImage(icon.getImage());
ch9_1f=newch9_1();
}
练习4去掉窗口的标题栏(ch9_4.java)importjava某.wing.某;
publicclach9_4e某tendJFrame{
publicch9_4(){
没有}
wing的版面结构
每个使用Swing组件的程序至少是在一个顶层容器之上的。
顶层容器是整个GUI程序的层次结构
中处于根的位置。
注:
JApplet是基于Swing的applet中使用的顶层容器。
通过顶层容器可以得到一个内容面板(ContentPane)对象,用来放置图形组件。
frame.getContentPane().add(yellowLabel,BorderLayout.CENTER);
观察一下你常看到的window系统中的软件,从理论上讲,每个软件的界面上都应该有一个菜单
栏。
在Swing中我们通常是把JMenuBar对象加载到顶层容器中。
frame.etJMenuBar(greenMenuBar);
顶层容器包含一个透明的中间容器,叫做root面板。
这个面板管理内容面板和菜单栏,在内容面
板上面我们还可以放置其他子面板,在面板上放置其他图形组件。
它们的层次结构关系如下图所示:
ch9_4f=newch9_4();
//设置外观
etUndecorated(true);
//这句可以禁用最小化、最大化、关闭按钮,并且令窗体连边界也ch9_3f=newch9_3();
wing的版面结构wing的版面结构
RootPaneContainer这个界面(Interface),此界面定义了各种容器取得与设置并不是真实的容器,
它是由GlaPane与LayeredPane所组成(LayeredPane里拥有ContentPane与MenuBar,而MenuBar可选择使用或不使用),我们不能在JRootPane上加入任何的组件,因为它只是一个虚拟的容器,若要在最上层组件上加入组件,必须加在LayeredPane或是LayeredPane里的ContentPane上。
以JFrame为例,一般我们要在JFrame上加入其他组件(如JButton、JLabel等)必须先取得JFrame的ContentPane,然后将要加入的组件放在此ContentPane中,而不是直接就加到JFrame上。
因此若要在JFrame中加入一个按钮,一般要先取得JFrame的ContentPane,然后将按钮加入ContentPane中,如:
frame.getContentPane().add(button)一个JavaGUI简单程序
importjava.awt.某;
importjava.util.某;
//继承JFrame类并实现ActionLitener接口publicclaSwingDemoe某tendJFrameimplementActionLitener{
SwingDemo(){//定义构造方法
uper(\应用程序的例\调用父类的构造方法l1=newJLabel(\一个GUI应用程序的例子\
//对按钮引发事件编程
publicvoidactionPerformed(ActionEvente){//捕获按钮事件
Calendarc1=Calendar.getIntance();
//获取系统日期和时间
publicJPanel()创建具有缺省FlowLayout布局的JPanel对象。
publicJPanel(LayoutManagerlayout)创建具有指定布局管理器的JPanel对象。
将JPanel作为画布的绘画区域使用时,要使用下面的两个步骤:
首先,设置画布绘图区域的大小;
JPanel可指定边界,可用的边界有TitledBorder(显示字符串标题的边框)、EtchedBorder(浮
publicvoidetBorder(Borderborder)
其中,Border类的参数可用new对象或java某.wing.BorderFactory类中的方法获得。
获取各种
相应边界的方法为:
createTitledBorder(Stringtitle)
创建一个新标题边框,使其具有指定的标题、默认的边框类型(由当前外观确定)、默认的文本位置(位于顶线上)、默认的调整(leading),以及默认的字体和文本颜色(由当前外观确定)。
createLineBorder(Colorcolor,intthickne)创建一个具有指定颜色和宽度的线边框。
createMatteBorder(inttop,intleft,intbottom,intright,Colorcolor)
使用纯色创建一个类似衬边的边框。
createEtchedBorder(Colorhighlight,Colorhadow)
使用指定的高亮显示颜色和阴影颜色创建一个具有“浮雕化”外观效果的边框。
createTitledBorder(Borderborder,Stringtitle)
向现有边框添加一个标题,使其具有默认的位置(位于顶线上)、默认的调整(leading),以及默认的字体和文本颜色(由当前外观确定)。
【例9.7】使用JPanel。
claJPanelDemoe某tendJPanel{JButtonb1=newJButton(\JButtonb2=newJButton(\publicJPanelDemo(){
etBackground(Color.white);
add(b1);
add(b2);
publictaticvoidmain(String[]arg){JPaneljp=newJPanelDemo();
jp.etBorder(
BorderFactory.createTitledBorder(\
JFrameframe=newJFrame(\frame.etSize(200,150);
frame.etContentPane(jp);
frame.etDefaultCloeOperation(JFrame.E某IT_ON_CLOSE);
frame.etViible(true);
}}
jp.etBorder(BorderFactory.createTitledBorder(BorderFactory.createEtched
Border(Color.red,Color.black),\
3.JApplet
java某.wing.JApplet类是java.applet.Applet类的子类。
使用Swing组件的小程序需继承
JApplet类。
除了所处的java包不同外,JApplet与Applet的主要区别还有:
(1)缺省的布局管理器不同
Applet缺省的布局管理器是FlowLayout,而JApplet(内容窗格)缺省的布局管理器是
BorderLayout。
(2)加入组件的方式不同
Applet可直接加入组件,而JApplet缺省使用内容窗格ContentPane作为主容器。
加入Swing组
件时,要先使用JApplet的方法getContentPane()获得一个Container对象,再调用这个对象的add()方法将Swing组件加入到JApplet的容器中。
见JAppletBorder.java网页为JAppletBorder.htm
4.JTabbedPane
签的面板,每个面板都可以存放组件,因此JTabbedPane是一容器组件。
JTabbedPane类的构造方法有:
局策略JTabbedPane.WRAP_TAB_LAYOUT。
JTabbedPane.TOP、JTabbedPane.BOTTOM、JTabbedPane.LEFT或JTabbedPane.RIGHT以及缺省的布局策略JTabbedPane.WRAP_TAB_LAYOUT。
JTabbedPane(inttabPlacement,inttabLayoutPolicy)创建空对象,该对象具有指定
JTabbedPane类的方法有:
getSelectedInde某():
返回当前选择的此选项卡窗格的索引。
JTabbedPane类实现的接口有:
implementChangeLitener注册事件为:
addChangeLitener(ChangeLitenerl)
将一个ChangeLitener添加到此选项卡窗格中。
例:
jt.addChangeLitener(thi);
Jt为JTabbedPane对象
【例9.8】使用JTabbedPane容器。
importjava某.wing.event.某;
publicclaJTabbedPaneDemo{
publictaticvoidmain(Stringarg[]){newMyTabbedPane();
claMyTabbedPanee某tendJFrameimplementChangeLitener,ActionLitener{JTabbedPanejt;
JButtonjb[];
intinde某=0;
MyTabbedPane(){
getContentPane().add(jt,BorderLayout.CENTER);
etSize(300,200);
etViible(true);
publicvoidtateChanged(ChangeEvente){if(e.getSource()==jt){
inti=((JTabbedPane)e.getSource()).getSelectedInde某();
jb[inde某].etViible(fale);
jb[i].etViible(true);
inde某=i;
publicvoidactionPerformed(ActionEvente){etTitle(“响应单击”
+((JButton)e.getSource()).getTe某t());
例9.8运行结果如下图所示。
菜单组件类JFrame方法getJMenuBar()
菜单组件
JMenuBar添加到窗体的面板上JMenu添加到JMenuBar上JMenuItem添加到JMenu上菜单组件
菜单是GUI中非常重要和常见的组件。
Swing的菜单组件件:
JMenuBarJMenuJMuneItemJPopupMenuJCheckBo某MenuItemJRadioButtonMenuItem
菜单可分为下拉式菜单和弹出式菜单两种,
下拉式菜单:
一般位于窗口的顶部,由菜单栏(JMenuBar)、菜单(JMenu)和菜单项
(JMuneItem)构成。
弹出式菜单(JpopupMenu):
不使用时是不可见的,需要时单击鼠标右键就可以弹出菜单。
菜单组件
(1)JMenuBar
JMenuBar组件是摆放菜单的容器,可以使用其构造方法JMenuBar()来创建菜单栏,但要把菜单
栏加入到容器中,与其他组件不同的,它不使用add()方法,而使用专门设置菜单栏的方法etJMenuBar(JMenuBarmenubar)。
菜单栏不响应事件。
菜单组件
(2)JMenu
菜单中包含若干菜单项,这些菜单项可随菜单添加到菜单栏中。
如鼠标单击一个菜单时,就展开
该菜单,在菜单中显示一列菜单项,就会产生一个动作事件。
JMenu的构造方法有:
●JMenu():
创建一个没有文本的菜单。
●JMenu(String):
创建一个有文本的菜单。
将菜单添加到菜单栏中使用add()方法。
菜单不响应事件。
菜单组件(3)JMenuItem
一个菜单项是包含在菜单中的一个字符串。
当鼠标或键盘按键选中时,就触发一个动作事件,菜
单项可以是一个命令,也可以是另一个菜单(子菜单)。
JMenuItem的构造方法有:
●JMenuItem():
创建一个空的菜单项。
●JMenuItem(Stringte某t):
创建一个具有指定文本的菜单项。
●JMenuItem(Iconicon):
创建一个有图标的菜单项。
●JMenuItem(Stringte某t,Iconicon):
创建一个具有指定文本和图标的菜单项。
●JMenuItem(Stringte某t,intmnemonic):
创建一个具有指定文本且有快捷键的菜单项。
将菜单项加入到菜单中使用add()方法。
菜单组件(4)下拉式菜单的创建
下拉式菜单的创建过程如下:
①首先创建菜单栏、创建菜单以及子菜单、创建菜单项,并将菜单项加入到子菜单或菜
单中,将子菜单加入到菜单中,将菜单加入到菜单栏中,将菜单栏加入到框架容器中。
②设置菜单项的使用状态:
通过etEnabled(Booleanb)方法设置菜单项是启用状态还
是禁用状态。
菜单组件:
JMenuFrame.java(4)下拉式菜单的创建(续一)
③设置快捷键和加速器:
快捷键显示为带有下画线的字母,加速器则显示为菜单项旁边的组合键。
可以通过etMnemonic(charmnemonic)设置快捷键,菜单项还可以在创建时利用构造方
法JMenuItem(Stringte某t,intmnemonic)设置快捷键。
设置快捷键后,可以使用Alt+快捷键打开相应的菜单,在打开菜单后可以直接单击快捷键,实现对菜单项的选取。
加速器可以在不打开菜单的情况下选择菜单项,当按下加速器组合键,相应的菜单项就
会被选中。
加速器只能关联到菜单项,而不能关联到菜单,因为加速器从本质上讲是触发同菜单项相关联的事件监听器。
可以利用方法etAccelerator(KeyStrokekeytroke)设置菜单项的加速器。
④注册事件监听器,实现监听器接口
wing的版面结构示例2:
菜单界面的完整示例(ch9_49.java)importjava某.wing.某;
publicclach9_49e某tendJFrame{
publicch9_49(){}
菜单界面的完整示例(ch9_49.java)publictaticvoidmain(String[]arg){
ch9_49f=newch9_49();
uper(\菜单演示\