Java 核心编程系列-图形用户界面(设计)
图形用户界面(设计)GUI,Graphical Uers Interface超类:java.awt、java.swing(后者是纯Java写成,所以可跨平台运行,其组件显示不依赖本地对等组件,因此称为轻量级组件,提供更多组件和更强大的功能。)一、容器类框架类:JFrame创建窗口,要么在普通类里面创建一个JFrame;要么继承JFrame,在main主函数中创建一个窗口类。切勿两种混着用。setV
图形用户界面(设计)
GUI,Graphical Uers Interface
超类:java.awt
、java.swing
(后者是纯Java写成,所以可跨平台运行,其组件显示不依赖本地对等组件,因此称为轻量级组件,提供更多组件和更强大的功能。)
一、容器类
- 框架类:JFrame
- 创建窗口,要么在普通类里面创建一个JFrame;要么继承JFrame,在main主函数中创建一个窗口类。切勿两种混着用。
- setVisited()要记得用上,而且一定要放在组件都添加完的代码后面,避免组件无显示的情况。
-
面板类:JPanel
-
滚动面板类:ScrollPanel
- 默认滚动条需要时才使用
- 对话框类:Dialog
二、组件类
- 标签类:JLabel
- 按钮类:JButton
- 文本框:JTextField
- 文本域:JTextArea
- 单选按钮:JRadioButton
- 单选框类:Choice
- 复选框类:JCheckBox
- 列表框类:List
- 表格:JTable
- 图片
三、菜单类
1、普通左上角菜单
- 菜单条:MenuBar
- 菜单: Menu
- 菜单项:MenuItem
//菜单条
MenuBar menubar = new MenuBar();
//菜单: 文件,编辑,帮助
Menu menuFile = new Menu("文件");
Menu menuEdit = new Menu("编辑");
Menu menuHelp = new Menu("帮助");
//"文件"的菜单项: 新建,打开,保存,另存为,退出
MenuItem menuItemFileNew = new MenuItem("新建");
MenuItem menuItemFileOpen = new MenuItem("打开");
MenuItem menuItemFileSave = new MenuItem("保存");
menuFile.add(menuItemFileNew);
menuFile.add(menuItemFileOpen);
menuFile.add(menuItemFileSave);
menubar.add(menuFile);
menubar.add(menuEdit);
menubar.add(menuHelp);
this.setMenuBar(menubar);;
2、右键点击弹出式菜单
- 弹出式菜单类:PopupMenu
- 菜单项:MenuItem
四、主要方法
- 设置标题栏:
setTitle() 或者 super()
- 设置位置:
setLocation() 或者 无布局情况下使用setBounds()
- 窗口居中显示的方法: this.setLocationRelativeTo(null);
- 设置大小:
setSize() 或者 无布局情况下使用setBounds()
- (按钮、文本框对setSize()无效),但无布局情况下使用setBounds() ,
若存在其他布局需要使用imension设置按钮尺寸:
Dimension preferredSize = new Dimension(70,60);
search.setPreferredSize(preferredSize );
- 设置前景色:
setForeground()
- 对于组件来说,前景色一般用来设置字体颜色,像标签、按钮、文本框文本域上输入的文字,但对于窗口或面板就没有看得见的效果
- 设置背景色:
setBackground()
- 底部板颜色,像窗口或面板这样的容器,还有按钮、文本框文本域、下拉单选框等组件的底部板,但对于标签就没有看得见的效果
- 表示颜色:
Color.RED 或 new Color(128,0,0)
- 设置字体:
setFont()
- 参数:
new Font("宋体",Font.BOLD, 20)
- 字体风格:Font.BOLD、Font.ITALIC、Font.PLAIN
布局管理器
容器可设置布局管理器,管理容器中组件的布局:
container.setLayout(new XxxLayout());
Java有6种布局管理器,AWT提供了5种:
FlowLayout
BorderLayout
GridLayout
GridBagLayout
CradLayout
Swing还提供了一种:
BoxLayout
1、FlowLayout
流式布局【感觉不好用!!!】
顾名思义,组件像水流一样,从第一行开始,从左向右依次排列,碰到边界时转到下一行继续。
三个构造函数:
FlowLayout() //使用默认参数
FlowLayout(int align) //设置对齐方式
FlowLayout(int align,int hgap,int vgap) //设置对齐方式、水平间距、垂直间距
align是FlowLayout类的常量,比如:FlowLayout.LEFT,FlowLayout.CENTER
2、BorderLayout
边界布局【简单的布局可以使用,不适合复杂的!!!】
将容器划分为EAST、WEST、SOUTH、NORTH、CENTER五个部分,每个部分可放置一个组件。
2个构造函数:
BorderLayout() //使用默认参数
BorderLayout(int hgap,int vgap) //设置水平间距、垂直间距
放置组件时需指定位置:
container.add(Component comp, Borderlayout.SOUTH); //第二个参数是BorderLayout类的常量,指定组件位置
container.add(Component comp); //缺省位置时,默认为BorderLayout.CENTER,放在中间
一共5个位置,一个位置最多放1个组件。
当然,可以在一个位置放置多个组件,只是后放置的组件会覆盖之前放置的组件。也可以一个都不放。
3、GridLayout
网格布局【适合组件大小差不多的,比如放置计算器的按钮!!!】
将容器划分为指定行数、列数的网格,每个格子的尺寸都相同,一个格子中放置一个组件。
从左往右、从上往下依次放置。
注意,网格线实际是不显示的。
2个构造函数:
BorderLayout(int rows,int cols) //设置行数、列数
BorderLayout(int rows,int cols,int hgap,int vgap) //设置行数、列数、水平间距、垂直间距
4、GridBagLayout
网格包布局
在GridLayout基础上发展而来,比GridLayout更加灵活。功能最强大,但也是最复杂的。
使用步骤:
(1)创建并指定布局管理器
GridLayout layout=new GridLayout();
container.setLayout(layout);
(2)创建GridBagConstraints对象并设置属性
GridBagConstraints constraints=new GridBagConstraints();
constraints.gridx=2; //设置该组件的起始位置的x坐标
constraints.gridy=1; //设置该组件的起始位置的y坐标
constraints.gridwidth=2; //设置该组件水平占据几个网格
constraints.gridheight=1; //设置改组件竖直方向占据几个网格
(3)建立布局管理器、组件、GridBagConstraints对象中间的关联
layout.setConstraints(component, constraints); //第一个参数是组件,第二个是GridBagConstraints对象
GridBagLayout用一个GridBagConstraints对象设置一个组件的位置
(4)向容器中添加组件
container.add(component);
添加组件时,重复(2)、(3)、(4)步。
GridBagConstraints有很多属性,比如fill——如何填充网格,此处不再一一列举。
5、CardLayout 卡片布局
【适合多界面,不错!!!】
将容器中的所有组件(通常是容器)当做一叠卡片,只显示一张卡片(一个组件)。
2个构造函数:
CradLayout()
CardLayout(int hgap,int vgap) //设置卡片与容器(左右、上下)边界的的距离
使用步骤:
(1)创建并指定布局管理器
CardLayout layout=new CardLayout(10,10);
container.setLayout(layout);
(2)往容器中添加卡片
container.add(“第一张”,component1); //第一个参数是卡片名,String类型,唯一标识此张卡片,第二个参数是要添加的组件(卡片)
container.add(“第二张”,component2);
…
默认显示第一张卡片(最先添加的那张)。
一般是配合事件监听使用,发生xx事件时显示指定的卡片。
CardLayout对象可指定要显示的卡片:
first(container) //显示第一张卡片(最先放入的那张)。参数container是卡片所在的容器
last(container) //最后一张
previous(container) //前一张
next(container) //下一张
show(container,“卡片名”) //特定的那张。第二个参数是添加卡片时指定的卡片名,唯一标识一张卡片
卡片是有顺序的,按照添加的顺序排列,最先添加的是第一张卡片。
以上几个方法是CardLayout对象具有的,使用示例:
CardLayout layout=new CardLayout();
container.setLayout(layout);
…
layout.show(container,“第二张”); //是通过布局管理器调用
6、BoxLayout
BoxLayout是在一个方向上排列组件,从左往右水平排列,或者从上往下竖直排列。
构造函数:
BoxLayout(container, axis); //第一个参数指定容器,第二个参数指定排列方向,
第二个参数可选的值是BoxLayout类的2个常量:BoxLayout.X_AXIS 水平排列,BoxLayout.Y_AXIS 竖直排列
BoxLayout的另一种使用方式:
Box box=Box.createHorizontalBox(); //Box是一个容器,可使用静态方法创建Box对象,自带BoxLayout布局管理器。
//createHorizontalBox()创建的Box对象默认使用水平的BoxLayout布局,createVerticalBox()默认使用竖直的BoxLayout布局。不必再指定布局管理器。
box.add(component);
》》》如果不设置布局管理器: JFrame、JDialog、JScrollPane默认使用BorderLayout
JPanel(包括Applet)默认使用FlowLayoutJava有2种方式管理布局:
使用布局管理器 绝对定位
绝对定位的使用示例: container.setLayout(null); //不使用布局管理器,清除默认的布局管理器
component1.setBounds(…); //手动为每个组件设置位置、尺寸
component2.setBounds(…); container.add(component1);
container.add(component2); 绝对定位很灵活、很简捷,可自由放置组件,但不跨平台。一般还是建议使用布局管理器。
更多推荐
所有评论(0)