图形界面Swing.docx
- 文档编号:27634367
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:18
- 大小:483.40KB
图形界面Swing.docx
《图形界面Swing.docx》由会员分享,可在线阅读,更多相关《图形界面Swing.docx(18页珍藏版)》请在冰豆网上搜索。
图形界面Swing
第9章 图形用户界面
(二)
9.1Swing包
Swing是建立在AWT基础之上的,它包括图形、颜色、字体、工具包和布局管理器等。
Swing提供了比AWT更全面的组件集合。
java.awt包与javax.swing包的区别:
(1)awt包画出的窗口因为在不同的平台上显示不同,存在缺点,所以产生了javax.swing包。
(2)新版的swing包可能与旧版不兼容;
(3)swing包是建立在awt包的基础上的,所以不能完全舍弃awt包;
(4)awt包的运行速度比swing快。
(5)将awt组件改写为swing组件时,大多数时候只需在原有的awt组件的每个类名前面加上“J”即可。
Swing组组建的分类:
顶层容器:
JFrame,JDialog,JApplet和Jwindow
普通容器(中间层容器):
JPanel,JScrollPane,JsplitPan和JTabbedPane
特殊容器:
JInternalFrame,JLayeredPane,JRootPane,JToolBar
基本组件:
如JButton,JComboBox,JList,JMune,JSlider,JTextField等
Swing组件使用的基本规则:
1、Swing组件应放入一个顶层Swing容器中
2、避免使用非Swing的重量级组件,因为当轻、重量级组件混合时,重量级组件总是画在轻量级组件的上面。
9.2顶级容器
1、JFrame类
JFrame类的构造方法
主要功能
JFrame()
创建没有标题的窗口
JFrame(Stringtitle)
创建以title为标题的窗口
JFrame类的方法
主要功能
ContainergetContentPane()
获得窗口的ContentPane组件
intgetDefaultCloseOperation()
当用户关闭窗口时的默认处理方法
intsetDefaultCloseOperation(int operation)
设置用户关闭窗口时发生的操作
voidupdate(Graphicsg)
引用paint()方法重绘窗口
voidremove(Componentcomponent)
将窗口中指定的组件删除
JMenuBargetMenuBar()
获得窗口中的菜单栏组件
voidsetLayout(LayoutManagermanager)
设置窗口的布局
注意:
1、注意JFrame与Frame类对于控件的添加方法。
JFrame上不能直接使用add方法添加控件,其添加对象应该想起内容面板ContentPane上添加对象,其布局也内容面板的setLayout()方法设定。
2、operation设置用户在此窗体上发起"close"时默认执行的操作。
必须指定以下选项之一:
∙DO_NOTHING_ON_CLOSE(在WindowConstants中定义):
不执行任何操作;要求程序在已注册的WindowListener对象的windowClosing方法中处理该操作。
∙HIDE_ON_CLOSE(在WindowConstants中定义):
调用任意已注册的WindowListener对象后自动隐藏该窗体。
∙DISPOSE_ON_CLOSE(在WindowConstants中定义):
调用任意已注册WindowListener的对象后自动隐藏并释放该窗体。
∙EXIT_ON_CLOSE(在JFrame中定义):
使用Systemexit方法退出应用程序。
仅在应用程序中使用。
默认情况下,该值被设置为HIDE_ON_CLOSE。
2、JDialog类
JDialog组件是一个顶层容器组件,不过每一个JDialog对象都必须依附一个JFrame对象而存在。
缺省状态下,用JDialog类创建的对话框都是无模式的,如果要创建有模式对话框,可以在构造函数里增加一个boolean项。
如要将任务要求的对话框改为有模式,以上创建语句修改为:
1)JDialog(JFramef,Strings):
构造方法
2)getContentPane():
同JFrame
例Dwindow.java
9.3swing包中基本组件
1.按钮Jbutton
方法名称
方法说明
publicJButton()
创建没有图标和名字的按钮。
publicJButton(Iconicon)
创建带图标的按钮。
publicJButton(Stringtext)
创建有名字的按钮。
publicJButton(Stringtext,Iconicon)
创建既有名字又有图标的按钮。
publicvoidsetText(Stringtext)
设置当前按钮的名字。
publicStringgetText()
获取当前按钮上的名字。
publicvoidsetIcon(Iconicon)
设置按钮上的图标。
publicIcongetIcon()
获取当前按钮上的图标。
publicvoidsetHorizontalTextPosition(inttextPosition)
设置按钮上名字和图标的水平位置。
publicvoidsetVerticalTextPosition(inttextPosition)
设置按钮上的名字相对图标的垂直位置。
2.标签JLabel
方法名称
方法说明
publicJLabel()
创建没有名字的标签。
publicJLabel(Strings)
创建名字是s的标签。
pubicJLabel(Strings,intaligment)
创建名字按指定对齐方式排列的标签。
publicJLabel(Icoicon)
创建具有图标icon的标签
publicJLabel(Strings,Iconicon,intaligment)
创建名字是s,具有图标icon的标签。
publicStringgetText()
获取标签名字
publicvoidsetText(Strings)
设置标签的名字为s
publicgetIcon()
获取标签的图标
publicvoidsetIcon(Iconicon)
设置标签的图标是icon
publicvoidsetHorizontalTextPosition(inta)
设置标签上名字和图标的水平位置。
publicvoidsetVerticalTextPosition(inta)
设置标签上名字和图标的垂直位置。
例:
Lal_but.Java
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassLal_butextendsJFrame{
privateJLabellabel1,label2;
privateJButtonbut1,but2;
publicLal_but(){
super("标签和按钮测试窗口");
Containerc=getContentPane();//设置容器对象
c.setLayout(newFlowLayout(100,100,10));//设置界面布局方式为FlowLayout
label1=newJLabel("标签中有文字和图像");
label1.setHorizontalTextPosition(SwingConstants.CENTER);//设置标签的水平位置
label1.setVerticalTextPosition(SwingConstants.BOTTOM);//设置标签的垂直位置
c.add(label1);
but1=newJButton("按钮1");
c.add(but1);
but2=newJButton("按钮2");
c.add(but2);
but1.addActionListener(newlistener());
but2.addActionListener(newlistener());
setSize(360,200);
show();
}
publicstaticvoidmain(Stringargs[]){
Lal_butapp=newLal_but();
app.addWindowListener(
newWindowAdapter(){
publicvoidwindowClosing(WindowEvente)
{System.exit(0);}
}
);
}
privateclasslistenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
JOptionPane.showMessageDialog(null,"Youpressed:
"+e.getActionCommand());
}
}
}
3.复选按钮JCheckBox
例TestCheck.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassTestCheckextendsJFrameimplementsItemListener{
JTextFieldjf;
JCheckBoxjc1,jc2;
publicvoiditemStateChanged(ItemEventie){
intisBold=Font.PLAIN;
intisItalic=Font.PLAIN;
if(ie.getSource()==jc1){
if(ie.getStateChange()==ItemEvent.SELECTED)
isBold=Font.BOLD;
}
if(ie.getSource()==jc2){
if(ie.getStateChange()==ItemEvent.SELECTED)
isItalic=Font.ITALIC;
}
jf.setFont(newFont("Serif",isBold+isItalic,14));
}
publicTestCheck(Strings){
super(s);
this.getContentPane().setLayout(newFlowLayout());
jf=newJTextField(20);
jf.setText("thisismytesttext");
jc1=newJCheckBox("bold");
jc2=newJCheckBox("Italic");
jc1.addItemListener(this);
jc2.addItemListener(this);
this.getContentPane().add(jf);
this.getContentPane().add(jc1);
this.getContentPane().add(jc2);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
this.setSize(240,200);
this.setVisible(true);
}
publicstaticvoidmain(Stringargv[]){
TestChecktc=newTestCheck("go~");
}
}
4.单选按钮JRadioButton,ButtonGroup
例TestRadio.java
5.组合框JComboBox
例TestCombo.java
6.文本框JTextField、文本域JTextArea、密码框JPasswordField
7.列表JList
例TestListWeapon.java
8.菜单栏JMenuBar、菜单JMenu、菜单项JMenuItem
Java程序中的菜单生成需要创建3种对象(菜单项对象、菜单对象和菜单栏对象),然后将菜单项对象添加到菜单对象中,又把菜单对象添加到菜单栏对象中,最后将菜单栏对象添加到所在的顶层容器对象中。
例TestMenu.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.event.*;//
publicclassTestMenuextendsJFrameimplementsActionListener{
JMenuBarbar;
JMenumFile,mOption;
JMenuItemmExit,mOpen;
JMenuItemmColor,mFont;
publicTestMenu(Strings){
super(s);
mExit=newJMenuItem("Exit");
mOpen=newJMenuItem("open");
mFile=newJMenu("File");
mFile.add(mOpen);
mFile.add(mExit);
mExit.addActionListener(this);
mOption=newJMenu("Option");
mColor=newJMenuItem("color");
mFont=newJMenuItem("font");
mOption.add(mColor);
mOption.add(mFont);
bar=newJMenuBar();
bar.add(mFile);
bar.add(mOption);
this.setJMenuBar(bar);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400,200);
this.setVisible(true);
}
publicvoidactionPerformed(ActionEventae){
if(ae.getSource()==mExit)
System.exit(0);
}
publicstaticvoidmain(String[]s){
TestMenutm=newTestMenu("sss");
}
}
}
9.弹出式菜单JPopupMenu
JPopupMenu可包含多个JMenu或JMenuItem对象。
弹出式菜单的创建过程和菜单系统的创建步骤基本相同:
⑴首先新建一个JPopupMenu对象。
⑵然后建立各个菜单选项。
⑶使用add()方法将菜单选项加入到JPopupMenu对象中。
⑷将弹出式菜单与相应组件关联。
关联的方法是:
为关联的组件注册鼠标监听器对象。
⑸在实现鼠标事件的方法中,检测弹出式菜单的触发条件是否满足(isPopupTrigger() 返回此鼠标事件是否为该平台的弹出菜单触发事件。
)。
一旦触发条件满足,便可使用JPopupMenu的show()活动显示弹出式菜单。
激活弹出式菜单最常用的方式为:
右键单击与JPopupMenu对象关联的组件。
例:
Exa_9_15.java
10.JSlider和JProgressBar
滑杆JSlider为用户提供了用以方便直观地输入数值的工具。
滑杆组件一般有一个连续的数值区间和一个可拖动的滑块,用户可以通过拖动滑块在一个区间范围内进行选择。
当滑杆被拖动时,滑块的值将发生变化,触发ChangeEvent事件。
滑杆组件的事件监听器要实现ChangeListener接口,并实现接口中的stateChanged()方法:
MyListenermyListener=newMyListener();
mySlider.addChangeListener(myListener);
privateclassMyListenerimplementsChangeListener{
publicvoidstateChanged(ChangeEventevent){
......//事件处理的代码
}
}
进度条JProgressBar是一类以图形化方式显示工作完成进度比率的组件。
通常用某种颜色动态填充一个矩形条块,以矩形条块被填充的比例来反映任务进行的进度大小。
JProgressBar类的重要方法与JSlider类近似,方法的拼写与功能也几乎完全相同,下面只列出JProgressBar类独有的几个重要方法:
1.doublegetPercentComplete():
返回进度条当前完成任务的百分比。
2.StringgetString():
返回代表进度条当前完成任务的比例的字符串。
3.voidsetString(Strings):
为进度条设置代表完成任务比例的字符串。
4.voidsetStringPainted(booleanb):
设置一个逻辑值来控制是否为进度条配备一个完成任务的百分比字符串。
5.voidsetBorderPainted(boolean):
设置一个逻辑值来控制进度条是否带有边框。
6.BoundedRangeModelgetModel():
返回进度条的数据模式
7.voidsetModel(BoundedRangeModelnewModel):
设置控制进度条的数据模式。
其中进度条的数据模式包含着进度条四种重要属性的数据,这些属性分别是minimum、maximum、extent及value。
例:
Exa_9_13.java
11.工具栏JToolBar类
工具栏是一种集成一组动作、命令或功能的组件,一般由带图标的按钮组成。
工具栏在图形界面的设计中常被用作菜单栏的补充,显示的是菜单中经常用到的命令对应的组件。
要使JToolBar支持拖曳功能,容纳工具栏的容器最好使用BorderLayout布局管理器。
Java提供JToolBar类创建工具栏对象。
工具栏对象是一个容器对象,创建后可以使用add()方法添加组件。
Orientation参数通常为HORIZONTAL(水平方向)或VERTRICAL(垂直方向)
例:
Exa_9_16.java
【语法】setToolTipText()方法的调用形式:
setToolTipText(Strings)
其中:
s表示组件上的提示文字
一般的Swing组建都有setToolTipText()方法
如果当工具栏中都是显示为图标形式的组件时,为使用户明白每个组件功能,可以对组件调用setToolTipText()方法设置提示文字。
这样,当鼠标指针停在组件上时,会显示其上的文字提示。
10.对话框设计
JOptionPane选项窗格对话框
JOptionPane类能够为用户显示提示信息或接受用户的信息输入。
JOptionPane提供的对话框都是模态对话框。
JOptionPane对话框分为四种类型,分别与四种静态方法相对应:
①OptionDialog对话框,对应于showOptionDialog()方法。
功能:
打开进行功能选择的对话框。
②MesageDialog对话框,对应于showMesageDialog()方法。
功能:
打开向用户显示消息的对话框。
③InputDialog对话框,对应于showInputDialog()方法。
功能:
打开提示并接受用户输入的对话框。
④ConfirmDialog对话框,对应于showConfirmDialog()方法。
功能:
打开一个要求确认的问题并等待用户回答响应的对话框
10.选项卡组件JTabbedPane类
选项卡是一种容器组件,允许用户通过单击具有标题或图标的卡片,访问不同的组件集。
当图形界面设计面临在一定的屏幕空间中显示多种信息时,选项卡组件将是最为合适的选择。
【语法】JTabbedPane类提供了3种构造方法用于创建不同初始状态的选项卡对象,方法的声明如下:
publicJTabbedPane():
创建一个具有默认JTabbedPane.TOP选项卡布局的空JTabbedPane对象;
publicJTabbedPane(inttabPlacement):
创建一个具有指定选项卡布局的空JTabbedPane对象;
publicJTabbedPane(inttabPlacement,inttabLayoutPolicy):
创建一个具有指定的选项卡布局和选项卡布局策略的空JTabbedPane对象。
其中:
tabPlacement表示关于内容的选项卡布局,可选值为
JTabbedPane.TOP
JTabbedPane.BOTTOM
JTabbedPane.LEFT
JTabbedPane.RIGHT
tabLayoutPolicy表示当一次运行中不能放入所有选项卡时选项卡布局的策略,可选值为
JTabbedPane.WRAP_TAB_LAYOUT:
如果一次运行不能放入所有选项卡,在多次运行中包装选项卡的布局策略。
JTabbedPane.SCROLL_TAB_LAYOUT:
如果一次运行中不能放入所有选项卡,提供可用选项卡子集的布局策略。
按照功能,可将JTabbedPane组件的方法分为以下几类:
【1】向选项卡窗格中添加组件对象
可用add()方法来完成。
add()有多种重载形式,最常用到的为以下两种:
①Componentadd(Component component)
②Componentadd(String title,Component component)
【2】向JTabbedPane组件中添加卡片
直接向JTabbedPane组件中添加卡片的方法有两类:
voidaddTab(Stringtitle,Iconicon,Componentcomponent,Stringtip)
voidinsertTab(Stringtitle,Iconicon,Componentcomponent,Stringtip,intindex)
【3】从JTabbedPane组件中删除卡片
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形界面 Swing