Swing是用户界面类,AWT是底层机制。
一、创建JFrame框架
注:Swing组件类都以“J”开头,如 JButton,JFrame等,AWT组件不带“J"。如果Swing组件和AWT组件一起用可能会导致视觉和行为的不一致。
现在,我们来创建一个空框架:
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* GuiDemo01
*
* @author wanghao
* @create 2018-07-07 下午4:17
**/
public class DemoGuiOne {
public static void main(String [] args){
// 声明窗口对象
JFrame f = new JFrame("简单的GUI窗口");
// 设置窗口宽高与坐标
f.setSize(300,500);
f.setLocation(300,500);
// 设置布局样式
f.setLayout(new FlowLayout());
/**
*
* 布局管理器
* 1)容器中的组件的排放方式,就是布局.
* 2)常见的布局管理器
* FlowLayout(流式布局管理器)
* 从左到右的顺序排列
* Panel默认的布局管理器
* BorderLayout(辩解布局管理器)
* 东 南 西 北 中
* Frame 默认的布局管理器
* 不指定布局方式,默认 满屏覆盖,在添加一个 也是 满屏覆盖
* GridLayout (网格布局管理器)
* 规则的矩阵
* CardLayout (卡片布局管理器)
* 选项卡
* GridBagLayout(网格包布局管理器)
* 非规则的矩阵
* 事件监听机制组成
* 事件源:
* 事件:Event
* 监听器:Listener
* 时间处理:(引发事件后处理方式)
*
* 事件源:就是awt包或者swing包中的那些图像界面组件.
* 事件:每个事件源都有自己特定的对应时间和共性时间.
* 监听器:可以出发某一个事件的动作都已经封装到监听器中.
*/
JButton jButton1 = new JButton("我是按钮1");
JButton jButton2 = new JButton("我是按钮2");
JButton jButton3 = new JButton("我是按钮3");
f.add(jButton1);
f.add(jButton2);
f.add(jButton3);
f.addWindowListener(new MyWindow());
f.setVisible(true);
}
}
/**
* 因为接口WindowLinstener的方法被WindowAdapter实现,所以我们简介继承WindowAdapter,并复写我们需要更改的方法。
*/
class MyWindow extends WindowAdapter {
@Override
public void windowOpened(WindowEvent e) {
System.out.println("窗口打开");
}
@Override
public void windowClosing(WindowEvent e) {
// 点×关闭窗口
System.out.println("窗口关闭");
System.exit(0);
}
@Override
public void windowActivated(WindowEvent e) {
System.out.println("窗口激活");
}
}
运行后的样子如下:
插入鼠标点击事件:
/* 事件监听机制组成
* 事件源:
* 事件:Event
* 监听器:Listener
* 时间处理:(引发事件后处理方式)
*
* 事件源:就是awt包或者swing包中的那些图像界面组件.
* 事件:每个事件源都有自己特定的对应时间和共性时间.
* 监听器:可以出发某一个事件的动作都已经封装到监听器中.
*/
JButton jButton1 = new JButton("我是按钮1");
JButton jButton2 = new JButton("我是按钮2");
JButton jButton3 = new JButton("我是按钮3");
jButton1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.exit(10);
System.out.println("按钮干的退出");
}
});
插入键盘按键事件:
// 键盘和鼠标事件
TextField textField = new TextField();
textField.addKeyListener(new KeyAdapter() {
/**
* keyPressed:键盘按下,未释放
* keyTyped:键盘按下,然后释放。
* 对于按下键和释放键事件,getKeyCode 方法返回该事件的 keyCode。对于键入键事件,
* getKeyCode 方法总是返回 VK_UNDEFINED。
*
* 所以键入键事件只能靠 getKeyChar 来区分了
*
*
KeyPressed是键被按下,KeyReleased是键被弹起,这两个都是更底层一些的事件。
KeyTypede是指有字符被输入,比如按住shift,再按A键,如果当时Caps Lock不亮,就产生一个输入大写A的事件。
*/
@Override
public void keyTyped(KeyEvent e) {
super.keyTyped(e);
System.out.println("是指字符被输入。Code:"+e.getKeyCode());
System.out.println("是指字符被输入。Char:"+e.getKeyChar());
}
@Override
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
System.out.println("是指键被按下。Code:"+e.getKeyCode());
System.out.println("是指键被按下。Char:"+e.getKeyChar());
}
@Override
public void keyReleased(KeyEvent e) {
super.keyReleased(e);
System.out.println("是指键被弹起。Code:"+e.getKeyCode());
System.out.println("是指键被弹起。Char:"+e.getKeyChar());
}
});
f.add(textField);
插入自定义布局:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* 点击按钮改变颜色
*
* @author wanghao
* @create 2018-07-07 下午4:57
**/
public class ColorWindow {
public static void main(String[] args) {
final Frame f=new Frame("XXX");
f.setLayout(null);
f.setSize(500,400);
f.setLocation(300,200);
// 设置背景颜色 初始背景颜色黄色
f.setBackground(new Color(255, 255, 0));
Button red=new Button("红色");
red.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("改变背景颜色");
Color bgColor = new Color(255, 0, 0);
// 更改背景颜色为红色
f.setBackground(bgColor);
}
});
Button green=new Button("绿色");
green.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("改变背景颜色");
Color bgColor = new Color(0, 255, 0);
// 更改背景颜色绿色
f.setBackground(bgColor);
}
});
Button Blue=new Button("兰色");
Blue.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("改变背景颜色");
Color bgColor = new Color(0, 0, 255);
// 更改背景颜色蓝色
f.setBackground(bgColor);
}
});
Button revert=new Button("还原");
revert.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("改变背景颜色");
Color bgColor = new Color(255, 255, 0);
// 更改背景颜色蓝色
f.setBackground(bgColor);
}
});
Button title=new Button("设置背景颜色");
title.setBounds(0,20,250,50);
//设置按钮尺寸
red.setBounds(0,70,100,50);
green.setBounds(0,120,100,50);
Blue.setBounds(0,170,100,50);
revert.setBounds(0,220,100,50);
f.add(title);
f.add(red);
f.add(green);
f.add(Blue);
f.add(revert);
f.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.out.println("我关了");
System.exit(0);
}
});
f.setVisible(true);
}
}
运行后的效果如下: