/**
* 笔记:
* 图形用户界面(GUI:Graphics User Interface):用户与程序交互的窗口,比命令行更加直观,更好操作。
* 一、用什么开发GUI?
* 历史:1.Sun提供跨平台GUI开发工具包AWT抽象窗口工具箱(Abstract Window Toolkit)。
* 2.Sun创建一个新的GUI框架swing,解决了awt存在的Icd的问题。
* 3.IBM认为swing比较消耗内存,创建了一个新的GUI库,这就是SWT。
* 4.IBM为了方便开发SWT程序,在SWT基础上又创建了一个更易用,功能强大的图形包“JFace”。
*
* 二、eclipse工具介绍(IDE:集成开发环境,例如eclipse,VS2015等等)
* 1.一个开源的可扩展的开发环境。
* 2.不能开发Java ee项目,需要安装WEB开发插件(lomboz 或 myeclipse) 。
* 三、button组件
* 1.JButton是AbstractButton 的子类。
* 2.属于容器类组件,可以加入别的组件。
* 3.Swing 包的按钮不只有JButton,还有单选按钮(JRadioButton),箭头按钮(BasicArrowButton),触发器按钮(JToggleButton)。
* 四、布局管理器
* 1.概念
* 组件在容器中的位置和大小是由布局管理器来决定的。所有的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理器。
* 2.分类(前三个最常用)
* (1)流式布局管理器(FlowLayout)
* 按照组件的添加次序将组件从左到右放置在容器中,当达到容器的边界时,组件将放置在下一行中。
* FlowLayout可以以左对齐,居中对齐,右对齐的方式排列组件。
* 注意事项:1.不限制他所管理的组件的大小,允许他们有最佳大小。
* 2.当容器被缩放时,组件的位置可能变化,但组件的大小不变。(如果不想让容器改变,this.Resizeable(false))。
* 3.默认组件是居中对齐,可以通过FlowLayout(int align)函数来指定对齐方式。
* (2)边界布局管理器(BorderLayout)
* 将容器简单划分为东南西北中五个区域,中间区域位置最大。
* 注意事项:1.不是五个部分都必须添加。
* 2.中部组件会自动调节大小。
* 3.Frame,JDialog默认布局管理器就是BorderLayout。
* (3)网格布局管理器(GridLayout)
* 将容器分成多行多列,组件被填充到每个网格中,添加到容器中的组件首先放置到左上角的网格中。然后从左到右依次放置其他组件。
* 当占满该行所有的网格后,接着在下一行从左到右放置组件。
* 注意事项:1.组件的相对位置不随着容器的缩放而变化,但大小会有所变化。
* 2.所有组件大小相同。
* 3.可以通过GridLayout(int rows,int cols,int hgap,int vgap)来指定网格的行列和水平竖直间隙。
* //其中,rows是行数,cols是列数,hgap是垂直间隙,vgap是竖直间隙。
* (4)卡片布局管理器(CardLayout)
* (5)网格包布布局管理器(GridBagLayout)
* 五、面板组件(Jpanel)—— 布局管理器的组合使用
* JPanel是非顶层容器,一个界面只可以有一个JFrame窗体组件。但是可以有多个JPanel面板组件,JPanel可以使用各种布局管理器。
* 注意事项:1.JPanel是JComponent的子类。
* 2.属于容器类组件,可以加入到别的组件。
* 3.默认布局管理器是流式布局(FlowLayout)。
*
*/
* 笔记:
* 图形用户界面(GUI:Graphics User Interface):用户与程序交互的窗口,比命令行更加直观,更好操作。
* 一、用什么开发GUI?
* 历史:1.Sun提供跨平台GUI开发工具包AWT抽象窗口工具箱(Abstract Window Toolkit)。
* 2.Sun创建一个新的GUI框架swing,解决了awt存在的Icd的问题。
* 3.IBM认为swing比较消耗内存,创建了一个新的GUI库,这就是SWT。
* 4.IBM为了方便开发SWT程序,在SWT基础上又创建了一个更易用,功能强大的图形包“JFace”。
*
* 二、eclipse工具介绍(IDE:集成开发环境,例如eclipse,VS2015等等)
* 1.一个开源的可扩展的开发环境。
* 2.不能开发Java ee项目,需要安装WEB开发插件(lomboz 或 myeclipse) 。
* 三、button组件
* 1.JButton是AbstractButton 的子类。
* 2.属于容器类组件,可以加入别的组件。
* 3.Swing 包的按钮不只有JButton,还有单选按钮(JRadioButton),箭头按钮(BasicArrowButton),触发器按钮(JToggleButton)。
* 四、布局管理器
* 1.概念
* 组件在容器中的位置和大小是由布局管理器来决定的。所有的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理器。
* 2.分类(前三个最常用)
* (1)流式布局管理器(FlowLayout)
* 按照组件的添加次序将组件从左到右放置在容器中,当达到容器的边界时,组件将放置在下一行中。
* FlowLayout可以以左对齐,居中对齐,右对齐的方式排列组件。
* 注意事项:1.不限制他所管理的组件的大小,允许他们有最佳大小。
* 2.当容器被缩放时,组件的位置可能变化,但组件的大小不变。(如果不想让容器改变,this.Resizeable(false))。
* 3.默认组件是居中对齐,可以通过FlowLayout(int align)函数来指定对齐方式。
* (2)边界布局管理器(BorderLayout)
* 将容器简单划分为东南西北中五个区域,中间区域位置最大。
* 注意事项:1.不是五个部分都必须添加。
* 2.中部组件会自动调节大小。
* 3.Frame,JDialog默认布局管理器就是BorderLayout。
* (3)网格布局管理器(GridLayout)
* 将容器分成多行多列,组件被填充到每个网格中,添加到容器中的组件首先放置到左上角的网格中。然后从左到右依次放置其他组件。
* 当占满该行所有的网格后,接着在下一行从左到右放置组件。
* 注意事项:1.组件的相对位置不随着容器的缩放而变化,但大小会有所变化。
* 2.所有组件大小相同。
* 3.可以通过GridLayout(int rows,int cols,int hgap,int vgap)来指定网格的行列和水平竖直间隙。
* //其中,rows是行数,cols是列数,hgap是垂直间隙,vgap是竖直间隙。
* (4)卡片布局管理器(CardLayout)
* (5)网格包布布局管理器(GridBagLayout)
* 五、面板组件(Jpanel)—— 布局管理器的组合使用
* JPanel是非顶层容器,一个界面只可以有一个JFrame窗体组件。但是可以有多个JPanel面板组件,JPanel可以使用各种布局管理器。
* 注意事项:1.JPanel是JComponent的子类。
* 2.属于容器类组件,可以加入到别的组件。
* 3.默认布局管理器是流式布局(FlowLayout)。
*
*/
package com.shuiyixin1;
import java.awt.*;
import javax.swing.*;
/**
* @作者:shuiyixin
* @日期:2018.02.16
* @内容:图形用户界面(GUI)
*
*/
public class learnJ_008tuxing extends JFrame{
//在类中定义一个button,将需要的组件定义到主函数前。
JButton jbu1,jbu2,jbu3,jbu4,jbu5,jbu6 = null;
int size = 9;
JButton jbu[] =new JButton[size];
JPanel jp1,jp2;
public static void main(String[] args) {
// TODO Auto-generated method stub
learnJ_008tuxing tx1 = new learnJ_008tuxing();
learnJ_008tuxing tx2 = new learnJ_008tuxing();
learnJ_008tuxing tx3 = new learnJ_008tuxing();
//tx1.tuxing_BorderLayout();
//tx2.tuxing_FlowLayout();
//tx3.tuxing_GridLayout();
tx1.tuxing_Jpanel();
}
//边界布局管理器。
public void tuxing_BorderLayout(){
//步骤:
// 1.继承JFrame(类中继承)
// 2.定义所需组件(类体内定义)
// 3.创建组件(一般情况采用构造函数)
// 4.添加各个组件
// 5.设置窗体属性
// 6.显示窗体
//JFrame是一个顶层容器类。(可以添加其他swing组件的类)
//JFrame jf = new JFrame();
//swing组件之button
jbu1 = new JButton("东");
jbu2 = new JButton("西");
jbu3 = new JButton("南");
jbu4 = new JButton("北");
jbu5 = new JButton("中");
//添加JButton组件,只有一个时,默认占据全部JFrame
this.add(jbu1, BorderLayout.EAST);
this.add(jbu2, BorderLayout.WEST);
this.add(jbu3, BorderLayout.SOUTH);
this.add(jbu4, BorderLayout.NORTH);
this.add(jbu5, BorderLayout.CENTER);
//窗口
this.setTitle("边界布局管理器");//给窗口设置标题
this.setSize(200, 200);//设置大小,按像素(1像素 = ?厘米)
this.setLocation(100, 200);//设置初始位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置当前关闭窗口,保证jvm也退出。
//显示
this.setVisible(true);
}
//流式布局管理器
public void tuxing_FlowLayout(){
//button组件
jbu1 = new JButton("关羽");
jbu1.setSize(100, 10);//不会改变组建的大小。
jbu2 = new JButton("张飞");
jbu3 = new JButton("赵云");
jbu4 = new JButton("马超");
jbu5 = new JButton("黄忠");
//添加组件
this.add(jbu1);
this.add(jbu2);
this.add(jbu3);
this.add(jbu4);
this.add(jbu5);
//设置组件为流式布局
this.setLayout(new FlowLayout(FlowLayout.LEFT));
//窗口
this.setTitle("流式布局管理器");//定义窗体标题
this.setSize(200, 200);//定义窗体大小,可更改
this.setLocation(100, 200);//定义窗体位置,可更改
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出时保证jvm也关闭。
this.setResizable(false);
//显示
this.setVisible(true);
}
//网格布局管理器
public void tuxing_GridLayout(){
//创建组件
for (int i = 0; i < size; i++) {
jbu[i] = new JButton(String.valueOf(i));
}
//设置网格布局
this.setLayout(new GridLayout(3,3,10,10));
//添加组件
for (int i = 0; i < size; i++) {
this.add(jbu[i]);
}
//设置窗体属性
this.setTitle("网格布局管理器");
this.setSize(300, 210);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(200, 200);
//显示
this.setVisible(true);
}
//面板组件多种布局管理器的使用
public void tuxing_Jpanel(){
jp1 = new JPanel();
jp2 = new JPanel();
jbu1 = new JButton("西瓜");
jbu2 = new JButton("苹果");
jbu3 = new JButton("荔枝");
jbu4 = new JButton("葡萄");
jbu5 = new JButton("橘子");
jbu6 = new JButton("香蕉");
//设置布局管理器
//添加组件
jp1.add(jbu1);
jp1.add(jbu2);
jp2.add(jbu3);
jp2.add(jbu4);
jp2.add(jbu5);
//把Panel加入JFrame
this.add(jp1,BorderLayout.NORTH);
this.add(jbu6, BorderLayout.CENTER);
this.add(jp2,BorderLayout.SOUTH);
//设置窗体属性
this.setTitle("面板组件");
this.setSize(300, 210);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(200, 200);
//显示
this.setVisible(true);
}
}