Java GUI.docx
- 文档编号:1969425
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:34
- 大小:26.73KB
Java GUI.docx
《Java GUI.docx》由会员分享,可在线阅读,更多相关《Java GUI.docx(34页珍藏版)》请在冰点文库上搜索。
JavaGUI
Java.awt
Javax.swing
Javax表示扩展包。
图形界面优先选用swing
创建GUI的步骤:
选择一个容器
选择一个布局管理器
添加组建到容器
创建事件句柄
Component
|
————————
||
Container单一组建
Component
|
Container
|
————————————————
|||
JComponentWindowPanel
| | |
JPanel_____ Applet
|||
FrameDialogJapplet
||
JFrameJDialog
JComponent及其子类和Panel及其子类的默认布局管理器是FlowLayout。
Window及其子类的默认布局管理是BorderLayout。
Window是顶层容器,可以没有有边框和标题栏。
Frame一定是有边框和标题栏顶层容器,可以独立存在。
Dialog不能独立存在,依赖于另一个容器存在,有边框有标题栏。
Frame和Dialog定义在java.awt包中
Jframe和JDialog定义在Javax.swing包中
但是它们是有继承关系的
以J开头的组件一般是swing包的组件,awt中可能会有个不含J的原型组件。
Panel不可以作为顶层容器。
Applet用的很少了,java有两种运行的方法JavaApplication和Applet,Application是有主方法的程序,Applet是覆盖Applet提供的程序生命周期的类,将它装入另外一个程序中,让另外一个程序调用Applet。
顶层容器:
JFrame,JWindowandJDialog
一般容器:
JPanel,JScrollPane,JToolBar,JSplitPane,JTabbedPane
JFrame中有个ContentPane,内容面板。
容器的方法:
Add():
向容器中添加组件。
setLayout():
设置布局管理器
getLayout():
获取布局管理器
getCommponent():
removeandremove():
删除组件
布局管理器:
FlowLayout:
流动布局
BorderLayout:
边框布局,很多顶层容器的默认布局
BoxLayout:
盒式布局swing包中
GridLayout:
网格布局
CardLayout:
卡片布局
GridBagLayout:
不严格的网状布局
只有BoxLayout在swing包下,其他的布局都在awt包下。
重点掌握FlowLayout,BorderLayout,GridLayout
FlowLayout:
publicclassFlowLayoutTest{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("FlowLayoutTest");
frame.setLayout(newFlowLayout());
for(inti=0;i<10;i++){
frame.add(newJButton("Button"+i));
//frame.getContentPane().add(newJButton("Button"+i));getContentPane()是取得
//frame的内容面板,JDK1.5后,可以省略去这一步
}
frame.setBounds(100,100,200,300);
frame.setDefaultCloseOpeation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
BorderLayout:
importjava.awt.*;
importjavax.swing.*;
publicclassBorderLayoutTest{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("BorderLayoutTest");
frame.setLayout(newBorderLayout());
frame.add(newJButton("east"),BorderLayout.EAST);
frame.add(newJButton("west"),BorderLayout.WEST);
frame.add(newJButton("north"),BorderLayout.NORTH);
frame.add(newJButton("south"),BorderLayout.SOUTH);
frame.add(newJButton("center"),BorderLayout.CENTER);
frame.setBounds(100,100,500,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
GridLayout:
importjava.awt.*;
importjavax.swing.*;
publicclassGirdLayoutTest{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("GirdLayoutTest");
frame.setLayout(newGridLayout(3,5,10,10));
for(inti=0;i<15;i++){
frame.add(newJButton("Button"+(i+1)));
}
frame.setBounds(100,100,500,200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
JAVA图形界面
一、开发工具包
1、java.awt包
2、在1.3以后有了javax.swing包,是对awt的重写和扩展,现在基本上都在swing的基础上做开发
二、图形界面的开发过程
1、选择一个容器Container
2、选择一个布局管理器:
排列方式
3、在容器中加入图形组件【容器(复合组件)或单一组件】
4、给界面设置事件处理的代码
四、布局管理器
1、FlowLayout流动布局
--容器中的组件的排列位置会按容器的大小或者边框大小的改变而自动改变
2、BorderLayout边框布局
--按东南西北中划分5个方位存放组件,每个组件占据一个方位
3、BoxLayout盒子布局
--显示的容器是一层层的
4、GirdLayout网格布局
--按网格形式划分的
5、CardLayout卡片布局
--不管有多少组件,只能一次看到一个组件,是层叠在一起的,必须设置事
件触发来翻页查看其他组件
6、GirdBagLayout
--不规则的排列可以用这个,把容器划分成N个同等大小的单元格,一个单元格
中最多有一个组件,把每个单元格都标上号,然后指定组件所占单元格的号就
可以了
五、具体用法
--new一个窗体
JFrameframe=newJFrame("FlowLayoutTest");//构造方法的参数是窗体的标题,
//还有两种构造方法参见API
--设置布局管理器
frame.setLayout(newFlowLayout());//设置为流布局
--增加组件
frame.add(newJButton("button"));//增加了一个按钮
在1.5之前要
--设置窗体大小
frame.setSize(400,300);//长400,高300
--设置窗体位置
frame.setLocation(200,300);//左上角的坐标离屏幕边框水平是200,数值是300
--设置窗体的可见性
frame.setVisible(true);//设置为true是可见的,不进行这一步此窗体只是内存中的一个对象
//是不可见的
--设置关闭窗口后程序运行情况
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口后程序关闭
//不设置的话默认为隐藏
--文本框JTextField
设置字体setFont(Fontf);
--设置背景颜色setBackground(Colorc)和前景颜色setForeground(Colorc)
六、按钮
--JButton
--JCheckBox
--JRadioButton多选一的话把这些对象都放到ButtonGroup里就可以了,ButtonGroup可以使按钮相互排斥。
七、文本框
--JTextField普通文本框,可以指定整数,表示显示文本长度,可以使用文档对象构造
--JPasswordField密码框,显示的是*,可以设置回显字符,getPassword()返回字符数组
--JTextArea多行文本框,可以设定显示的行数列数
--JEditorPane可以显示图标和文字
--JTextPane可以显示图标和文字,可以使用文档对象构造
--JLabel不可编辑文本,只是拿来看的
--JToolTip小标签,不可编辑
--JProgressBar进度条
八、菜单和菜单项
--JMenu在JFrame中的
--JPopupMenu弹出式菜单
--JTable表格
--JTree树状层次结构
九、文件选择器
--JFileChooser
退出窗口的三种方法:
System.exit(0);结束一个JVM进程和该进程创建的所有线程,包括用户线程和守护线程
dispose();从内存中消除一个窗体对象。
setVisible(false);隐藏一个窗体。
但该窗体并没有消失,可以用setVisible(true);再次把它显示出来。
如果一个窗体确实不需要了,可以调用dispose();把它清除掉。
++Swing读书笔记
1-3:
版面管理器(LayoutMenager)
|BorderLayout
|FlowLayout
|GridLayout
AWT----|CardLayout
|GridBagLayout
Swing--|BoxLayout
1-3-1:
BorderLayout的使用:
BorderLayout的类层次结构图:
java.lang.Object
--java.awt.BorderLayout
构造函数:
BorderLayout()建立一个没有间距的borderlayout
BorderLayout(inthgap,intvgap)建立一个组件间有间距的borderlayout
BorderLayout将版面划分为东、西、南、北、中
例子:
BorderLayoutDemo.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassBorderLayoutDemo{
publicBorderLayoutDemo(){
JFramef=newJFrame();
ContainercontentPane=f.getContentPane();
contentPane.setLayout(newBorderLayout());
contentPane.add(newJButton("EAST"),BorderLayout.EAST);
contentPane.add(newJButton("WEST"),BorderLayout.WEST);
contentPane.add(newJButton("SOUTH"),BorderLayout.SOUTH);
contentPane.add(newJButton("NORTH"),BorderLayout.NORTH);
contentPane.add(newJLabel("CENTER",JLabel.CENTER),BorderLayout.CENTER);
f.setTitle("BorderLayout");
f.pack();
f.setVisible(true);
/***read**/
/*处理关闭窗口的操作,若你没写这一段,就算你已经关闭窗口了,但程序并不会终止。
*/
f.addWindowListener(
newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
}
);
/***read**/
}
publicstaticvoidmain(String[]args){
BorderLayoutDemob=newBorderLayoutDemo();
}
}
设置组件的间距,你可以使用有间距参数的BorderLayout构造函数,也可以利用BorderLayout的setHgap(inthgap)与
setVgap(intvgap)两个方法来达成。
1-3-2:
FlowLayout的使用:
FlowLayout的类层次结构图:
java.lang.Object
--java.awt.FlowLayout
构造函数:
FlowLayout()建立一个新的FlowLayout,此FlowLayout默认值是居中对齐,组件彼此有5单位的水平与垂直间距。
FlowLayout(intalign)建立一个新的FlowLayout,此FlowLayout可设置排列方式,组件彼此有5单位的水平与垂直
间距。
FlowLayout(intalign,inthgap,intvgap)建立一个新的FlowLayout,此FlowLayout可设置排列方式与组件间距。
FlowLayoutDemo.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassFlowLayoutDemo{
publicFlowLayoutDemo(){
JFramef=newJFrame();
ContainercontentPane=f.getContentPane();
/*你可以使用有间距的FlowLayout构造函数,使FlowLayout的排列具有间距,并
*并可利用排列方向参数来指定靠什么方向排列,FlowLayout共有五种排列方式,
*依次是CENTER(默认值),LEFT,RIGHT,LEADING,TRAILING,若我们将下面程序第13
*行改成contentPane.setLayout(newFlowLayout(FlowLayout.LEFT));
*/
contentPane.setLayout(newFlowLayout());
contentPane.add(newJButton("first"));
contentPane.add(newJButton("second"));
contentPane.add(newJButton("third"));
contentPane.add(newJButton("fourth"));
contentPane.add(newJButton("fifth"));
contentPane.add(newJButton("Last"));
f.setTitle("FlowLayout");
//f.pack();//必须将f.pach()去掉,否则setSize功能将没有作用
f.setSize(400,220);
f.setVisible(true);
f.addWindowListener(
newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
}
);
}
publicstaticvoidmain(String[]args){
FlowLayoutDemob=newFlowLayoutDemo();
}
}
1-3-3:
GridLayout的使用:
GridLayout的类层次结构图:
java.lang.Object
--java.awt.GridLayout
GridLayout比FlowLayout多了行和列的设置,也就是说你要先设置GridLayout共有几行几列,就如同二维平面一般,然后你加
进去的组件会先填第一行的格子,然后再从第二行开始填,依此类扒,就像是一个个的格子一般。
而且GridLayout会将所填进去组
件的大小设为一样。
构造函数:
GridLayout()建立一个新的GridLayout,默认值是1行1列。
GridLayout(introws,intcols)建立一个几行几列的GridLayout.
GridLayout(introws,intcols,inthgap,intvgap)建立一个几行几列的GridLayout,并设置组件的间距。
例子:
GridLayoutDemo.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassCardLayoutDemoimplementsActionListener{
JPanelp1,p2,p3,p4;
inti=1;
JFramef;
publicCardLayoutDemo(){
f=newJFrame();//当做top-level组件
ContainercontentPane=f.getContentPane();
contentPane.setLayout(newGridLayout(2,1));
p1=newJPanel();
Buttonb=newButton("ChangeCard");
b.addActionListener(this);//当按下"ChangeCard"时,进行事件监听,将会有系统操作产生。
p1.add(b);//处理操作在52-64行.
contentPane.add(p1);
p2=newJPanel();
p2.setLayout(newFlowLayout());
p2.add(newJButton("first"));
p2.add(newJButton("second"));
p2.add(newJButton("third"));
p3=newJPanel();
p3.setLayout(newGridLayout(3,1));
p3.add(newJButton("fourth"));
p3.add(newJButton("fifth"));
p3.add(newJButton("Thisisthelastbutton"));
p4=newJPanel();
p4.setLayout(newCardLayout());
p4.add("one",p2);
p4.add("two",p3);
/*要显示CardLayout的卡片,除了用show(Containerparent,Stringname)这个方法外
*,也可试试first(Container),next(Container),previous(Container),last(Container)这
*四个方法,一样可以达到显示效果。
*/
((CardLayout)p4.getLayout()).show(p4,"one");
contentPane.add(p4);
f.setTitle("CardLayout");
f.pack();
f.setVisible(true);
f.addWindowListener(
newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
}
);
}
publicvoidactionPerformed(ActionEventevent){
switch(i){
case1:
((CardLayout)p4.getLayout()).show(p4,"two");
break;
case2:
((CardLayout)p4.getLayout()).show(p4,"one");
break;
}
i++;
if(i==3)i=1;
f.validate();
}
publicstaticvoidmain(String[]args){
newCardLayoutDemo();
}
}
1-3-5:
GridBagLayout的使用:
是java中最有弹性但也是最复杂的一种版面管理器。
它只有一种构造函数,但必须配合GridBagConstraints才能达到设置的效果。
GridBagLayout的类层次结构图:
java.lang.Object
--java.awt.GridBagLayout
构造函数:
GirdBagLayout()建立一个新的GridBagLayout管理器。
GridBagConstraints()建立一个新的GridBagConstraints对象。
GridBagConstraints(intgridx,intgridy,intgridwidth,intgridheight,doubleweightx,doubleweighty,intanchor,intfill,Insetsinsets,intipadx,intipady)建立一个新的GridBagConstraints对象,并指定其参数的值。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java GUI