GUI编程——Java(1)
GUI是什么?
- 图形用户接口编程
- 图形用户界面
核心技术有哪些?
- AWT
- Swing
组件
- 窗口 frame
- 面板 Panel
- 弹窗 Dialog
- 文本框 TextField
- 列表框 List
- 按钮 Button
- 监听 ~Listion
- 鼠标
- 键盘
- ...
能干啥?
- 了解MVC架构中的监听
1.AWT(Abstract Windows tools)抽象窗口工具
1.1AWT简介
1.包括多种类和接口!放置于java.awt包中
2.基本元素:Frame Panel Dialog Button TextField TextArea Lable...
1.2组件和容器
1.Frame窗口
package com.Zm.AWT;
import java.awt.*;
public class Work02 {
public static void main(String[] args) {
//Frame窗口
//第一步创建一个Frame对象
Frame frame = new Frame("我的Frame");
/* public Frame() throws HeadlessException {
this("");//可传入参数表示title 显示在窗口的上面
}//方法源码
*/
//设置窗口的基本格式
//1.设置窗口位置,窗口大小
frame.setBounds(100,100,400,300);
//2.设置窗口背景,传参为Color对象 使用RGB编码表示颜色,可设置透明度
frame.setBackground(new Color(240, 120, 145));
//3.显示窗口 setVisible默认为false表示不显示窗口
frame.setVisible(true);
}
}
经过上述代码可以创建出一个窗口,但是窗口不可以关闭也没有任何其他组件!
2.Panel面板
解决问题,窗口没有组件,添加基础组件Panel面板
package com.Zm.AWT;
import java.awt.*;
public class Work02 {
public static void main(String[] args) {
//Frame窗口
//第一步创建一个Frame对象
Frame frame = new Frame("我的Frame");
/* public Frame() throws HeadlessException {
this("");//可传入参数表示title 显示在窗口的上面
}//方法源码
*/
//设置窗口的基本格式
//1.设置窗口位置,窗口大小
frame.setBounds(100,100,400,300);
//2.设置窗口背景,传参为Color对象 使用RGB编码表示颜色,可设置透明度
frame.setBackground(new Color(240, 120, 145));
//3.设置布局
frame.setLayout(null);
//添加面板Panel
//创建Panel对象
Panel panel = new Panel();
/* public Panel() {
this(new FlowLayout()); //方法源码,Panel默认属性有一个布局为FlowLayout流水式布局
}
* */
//设置Panel基本格式,同Frame,位置相对于Frame
panel.setBounds(100,50,100,100);
panel.setBackground(new Color(244, 176, 49));
//添加Panel到Frame中
frame.add(panel);
//4.显示窗口 setVisible默认为false表示不显示窗口
frame.setVisible(true);
}
}
添加基础组件Panel后可以显示一个Panel在窗口上,Panel相当于一个容器,当要对窗口进行复杂布局时都是对多个Panel进行布局组合而成,Panel不可或缺。
3.布局管理器
布局是对Frame窗口和Panel都有的一种设置,包括三种基础布局:流式布局,东南西北中布局,表格布局。
还有一种绝对布局,即null,也就通过分析绝对位置进行放置的一种布局格式
3.1流式布局
package com.ZM.lesson1;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestFlowLayout {
public static void main(String[] args) {
Frame frame = new Frame("流式布局");
//设置一组按钮
Button button1 = new Button("button1");
Button button2 = new Button("button2");
Button button3 = new Button("button3");
//设置流式布局
frame.setLayout(new FlowLayout());//默认布局
//frame.setLayout(new FlowLayout(FlowLayout.LEFT));//布局在左
//frame.setLayout(new FlowLayout(FlowLayout.RIGHT));//布局在右
//设置弹窗的位置和大小(设在中间)
frame.setBounds(500,100,500,500);
//设置窗口颜色
frame.setBackground(new Color(35, 195, 182));
//添加按钮
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.setVisible(true);
}
}
3.2东南西北中布局
package com.ZM.lesson1;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestBorderLayout {
public static void main(String[] args) {
Frame frame = new Frame("东西南北中");
Button east = new Button("east");
Button west = new Button("west");
Button south = new Button("south");
Button north = new Button("north");
Button center = new Button("center");
//设置弹窗的位置和大小(设在中间)
frame.setBounds(500,100,500,500);
//设置窗口颜色
frame.setBackground(new Color(35, 80, 195));
frame.add(east,BorderLayout.EAST);
frame.add(west,BorderLayout.WEST);
frame.add(south,BorderLayout.SOUTH);
frame.add(north,BorderLayout.NORTH);
frame.add(center,BorderLayout.CENTER);
frame.setVisible(true);
}
}
3.3表格布局
package com.ZM.lesson1;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestGridLayout {
public static void main(String[] args) {
Frame frame = new Frame("表格");
Button btn1 = new Button("btn1");
Button btn2 = new Button("btn2");
Button btn3 = new Button("btn3");
Button btn4 = new Button("btn4");
Button btn5 = new Button("btn5");
Button btn6 = new Button("btn6");
//设置弹窗的位置和大小(设在中间)
frame.setBounds(500,100,500,500);
//设置表格--->三行两列
frame.setLayout(new GridLayout(2,3));
frame.add(btn1);
frame.add(btn2);
frame.add(btn3);
frame.add(btn4);
frame.add(btn5);
frame.add(btn6);
frame.setVisible(true);
}
}
4.监听事件
窗口到现在为止都没有关闭功能,需要将窗口正常关闭就需要监听事件,监听事件又可以针对窗口Frame,鼠标Mouse,键盘Key...
//加入一个按钮的监听事件
Button button = new Button("1");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand());
}
});
panel.add(button);
//添加鼠标监听事件 使用适配器方式而不是全写Listener中的全部方法
frame.addMouseListener(new MouseAdapter() {
/**
* {@inheritDoc}
*
* @param e
*/
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
System.out.println("Mouse Clicked");
}
});
//添加键盘监听事件
panel.addKeyListener(new KeyAdapter() {
/**
* Invoked when a key has been pressed.
*
* @param e
*/
@Override
public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyChar());
}
});
//添加关闭窗口的监听事件 使用适配器方式而不是全写WindowsListener中的全部方法
frame.addWindowListener(new WindowAdapter() {
/**
* Invoked when a window is in the process of being closed.
* The close operation can be overridden at this point.
*
* @param e
*/
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
System.exit(0);
}
});
自此,监听事件完成,窗口可以正常关闭,还有其他窗口监听事件,鼠标监听事件等等,不一一赘述。