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); } }
运行后的效果如下: