文章目录

  • 一、GUI-AWT
    • 1. AWT介绍
    • 2. 容器
      • 1)窗口 Frame
      • 2)面板 Panel
    • 3. 组件
      • 1)Button
      • 2)Label
      • 3)TextField
    • 4. 布局管理器
      • 1)流式布局 FlowLayout
      • 2)边框布局 BorderLayout
      • 3)表格布局 GridLayout
      • 4)布局容器的综合练习
    • 5. 事件监听
      • 1)ActionListener 按钮监听
      • 2)ActionListener 输入框监听
      • 3)简易计算器练习
      • 4)画笔 paint
      • 5)MouseListener 鼠标监听
      • 6)WindowListener 窗口监听
      • 7)KeyListener 键盘监听

一、GUI-AWT

1. AWT介绍

  • 什么是Awt

    • Awt是Java中的抽象组键窗口工具包,用来是实现Java中的图形界面化
  • Awt包中的元素
    • 容器
    • 布局管理器
    • 组件
    • 事件监听
  • Awt特点
    • 是重量级控件,使用了大量的Windows函数
    • 可移植性差,只能在Windows平台下执行
    • 在Windows平台下执行的速度快,可以调用Windows的函数

2. 容器

1)窗口 Frame

  • 作用

    • 一个带有标题、边框的顶层窗口
    • 可以设置窗口的大小、位置、背景色、布局、可见性等
    • 作为容器使用,可以将其他的组件、面板等排布在窗口上
  • 方法

    • public Frame(String title)

      • 构造方法,创建一个有指定标题的窗口,初始不可见
    • setTitle(String title)
      • 设置窗口的标题
    • setLocation(x,y)
      • 设置窗口的位置
    • setResizable(boolean resizable)
      • 设置窗口是否可以被拉伸
    • setSize(widht,height)
      • 设置窗口的大小
    • setBackground(Color color)
      • 设置窗口的背景颜色
    • setVisible(boolean b)
      • 设置窗口的可见性
    • add()
      • 给窗口中添加元素
  • 代码示例

    • 创建一个窗口
    public class FrameWindow {//我的第一个图形界面化窗口public static void main(String[] args) {//创建一个图形界面化窗口Frame frame = new Frame("我的第一个图形界面化窗口");//设置位置frame.setLocation(100, 100);//设置窗口的大小frame.setSize(500, 500);//设置界面可见性frame.setVisible(true);//设置界面的背景颜色frame.setBackground(new Color(243, 21, 12));//设置界面的位置固定,界面是否可以拉缩frame.setResizable(true);}
    }
    • 创建多个窗口
    public class FrameWindow2 {//封装自己的Frame子类,用来实现窗体public static void main(String[] args) {MyFrame frame1 = new MyFrame(100, 100, 200, 200, Color.red);MyFrame frame2 = new MyFrame(100, 300, 200, 200, Color.blue);MyFrame frame3 = new MyFrame(300, 100, 200, 200, Color.yellow);MyFrame frame4 = new MyFrame(300, 300, 200, 200, Color.ORANGE);}
    }class MyFrame extends Frame {public MyFrame(int x, int y, int w, int h, Color color) {setBounds(x, y, w, h);//设置位置、窗口大小setBackground(color);//设置窗口颜色setVisible(true);//设置窗口可见}
    }

2)面板 Panel

  • 作用

    • 简单的容器类,提供了一个容纳其他组件的空间,也可以容纳其他的面板
    • 面板默认为流式布局
    • 不能单独存在,必须依靠于其他的容器,也就是说,面板要添加到其他容器中进行使用
    • 在具体使用时,不是直接往窗口上添加元素,而是先将组件添加进面板上,使用面板进行布局,将面板添加进窗口
  • 方法

    • Panel()

      • 构造方法,创建一个默认布局为流式布局的面板
    • Panel(LayoutManager layout)
      • 创建一个指定布局的面板
    • setLayout(LayoutManager layout)
      • 设置布局
  • 代码示例

    • 创建一个面板,并将面板添加进容器中
    public class PanelExercise1 {//面板练习//面板比窗口的概念小一点,不能单独存在,要依附于窗口才能存在//窗口本身就是一个容器,面板也是,可以添加进窗口内,作为较小的容器来使用public static void main(String[] args) {//创建窗口与面板Frame frame = new Frame("Java面板联系");//创建窗口Panel panel = new Panel();//创建面板//设置窗口的布局frame.setLayout(null);//设置为绝对布局,使用各个组件的位置进行排布//设置窗口的属性frame.setBackground(Color.red);frame.setBounds(100, 100, 500, 500);frame.setVisible(true);//设置面板的属性panel.setBackground(Color.yellow);panel.setBounds(150, 150, 300, 300);panel.setVisible(true);//将面板放进窗口中frame.add(panel);//设置监听事件,解决窗口创建后关闭按钮问题//使用WindowListener接口的子实现类WindowAdapter的对象作为参数//重写对应点击关闭按钮事件的windowClosing()方法,完成关闭窗口frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
    }

3. 组件

1)Button

  • 一个标记按钮,当按钮被点击时可以触发一些事件

2)Label

  • 一个用来描述信息的标签

3)TextField

  • 一个文本组件,允许单行文本的输入,当按下回车键时表示输入结束

4. 布局管理器

1)流式布局 FlowLayout

  • 作用

    • 使用在窗口、面板等容器上,用来控制容器上组件的布局方式
    • 在一个方向上排列组件
  • 方法及属性

    • FlowLayout()

      • 创建一个默认为中心对齐的流式布局管理器(对象)
    • 属性
      • CENTER:中间
      • LEADING:底部
      • LEFT:左边
      • RIGHT:右边
      • TRAILING:顶部
  • 代码示例

    • 给窗口中添加5个Button按钮,使用流式布局
    public class flowLayouts {//布局管理器-流式布局public static void main(String[] args) {//创建窗口Frame frame = new Frame("流式布局练习");//窗口属性设置frame.setBounds(100, 100, 500, 500);frame.setBackground(Color.red);frame.setVisible(true);//窗口布局设置//FlowLayout()构造方法中可以传入具体的参数,来控制组键的位置//例如FlowLayout.LEFT是向左对齐、还有RIGHT、CENTER等frame.setLayout(new FlowLayout(FlowLayout.CENTER));//将窗口的布局设置为流式布局//创建Button按钮Button button1 = new Button("Button1");Button button2 = new Button("Button2");Button button3 = new Button("Button3");Button button4 = new Button("Button4");Button button5 = new Button("Button5");//将Button按钮添加进窗口中frame.add(button1);frame.add(button2);frame.add(button3);frame.add(button4);frame.add(button5);//设置监听事件关闭窗口frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
    }

2)边框布局 BorderLayout

  • 作用

    • 控制容器上组件的布局方式
    • 将容器划分为东、南、西、北、中五个区域,使用EAST、WEST、NORTH、SOUTH、CENTER五个静态常量进行设置
    • 可以根据容器的大小和组件的大小自动拉伸组件,以填充区域
  • 方法

    • BorderLayout()

      • 创建一个没有间隙的边框布局
    • BorderLayout(int hgap, int vgap)
      • 创建一个有指定间隙的边框布局
  • 代码示例

    • 创建一个窗口,在东南西北中五个区域分别填充一个Button按钮
    public class BorderLayouts {//东西南北中,边框布局//East West North Southpublic static void main(String[] args) {//创建窗口Frame frame = new Frame("边框布局练习");//设置窗口属性frame.setBounds(100, 100, 500, 500);frame.setBackground(Color.yellow);frame.setVisible(true);//设置窗口的布局frame.setLayout(new BorderLayout());//边框布局//创建Button按钮Button east = new Button("East");Button west = new Button("West");Button north = new Button("North");Button south = new Button("South");Button center = new Button("Centre");//将按钮按边框布局填放进窗口中frame.add(east, BorderLayout.EAST);frame.add(west, BorderLayout.WEST);frame.add(north, BorderLayout.NORTH);frame.add(south, BorderLayout.SOUTH);frame.add(center, BorderLayout.CENTER);//设置窗体关闭按钮frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
    }

3)表格布局 GridLayout

  • 作用

    • 控制容器上组件的布局方式
    • 将容器划分为指定行列的大小相等的矩阵网格,每一个组件都放在矩形网格中
  • 方法

    • GridLayout()

      • 创建一个默认为一行的表格布局
    • GridLayout(int rows, int cols)
      • 创建一个具有指定行和列的表格布局
    • GridLayout(int rows, int cols, int hgap, int vgap)
      • 创建一个具有指定行和列的表格布局,表格之间有指定的间隙
  • 代码示例

    • 创建一个两行三列的表格
    public class GridLayouts {//表格布局练习public static void main(String[] args) {//创建并设置窗口属性Frame frame = new Frame("表格布局练习");frame.setBounds(100, 100, 500, 500);frame.setVisible(true);//设置窗口的布局frame.setLayout(new GridLayout(2, 3));//表格布局,两行三列//创建Button按钮Button button1 = new Button("Button1");Button button2 = new Button("Button2");Button button3 = new Button("Button3");Button button4 = new Button("Button4");Button button5 = new Button("Button5");Button button6 = new Button("Button6");//添加Button按钮到窗口frame.add(button1);frame.add(button2);frame.add(button3);frame.add(button4);frame.add(button5);frame.add(button6);//关闭按钮设置frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
    }

4)布局容器的综合练习

  • 创建以下图案的窗口

public class LayoutTotalExercise {//窗口布局综合练习public static void main(String[] args) {/*** 1.总体上来说是上下两部分两行一列的表格布局* 2.上下部分分别是左中右三部分的边框布局* 3.上下部分的中间分别是两行一列的表格布局与两行两列的表格布局* 4.可以将各部分分别先放进面板中,再将面板组合填充进窗口中*///定义并设置窗口Frame frame = new Frame("窗口布局的综合练习");frame.setBounds(100, 100, 500, 500);frame.setVisible(true);//设置窗口的布局frame.setLayout(new GridLayout(2, 1));//分为上下两部分,两行一列//创建四个面板Panel panel1 = new Panel();//上半部分的面板Panel panel2 = new Panel();//上半部分中间的面板Panel panel3 = new Panel();//下半部分的面板Panel panel4 = new Panel();//下半部分中间的面板//给上半部分的面板填充panel1.setLayout(new BorderLayout());//上半部分整体为左中右的边框布局panel1.add(new Button("Button-UP-West"), BorderLayout.WEST);panel1.add(panel2, BorderLayout.CENTER);panel1.add(new Button("Button-UP-East"), BorderLayout.EAST);panel2.setLayout(new GridLayout(2, 1));panel2.add(new Button("Button-UP-Center-UP"));panel2.add(new Button("Button-UP-Center-Down"));//给下半部分的面板填充panel3.setLayout(new BorderLayout());//下半部分整体也为左中右的边框布局panel3.add(new Button("Button-Down-West"), BorderLayout.WEST);panel3.add(panel4, BorderLayout.CENTER);panel3.add(new Button("Button-Down-East"), BorderLayout.EAST);panel4.setLayout(new GridLayout(2, 2));panel4.add(new Button("Button-Down-Center-1"));panel4.add(new Button("Button-Down-Center-2"));panel4.add(new Button("Button-Down-Center-3"));panel4.add(new Button("Button-Down-Center-4"));//将上下两部分放进窗口中frame.add(panel1);frame.add(panel3);//设置关闭窗口frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
}

5. 事件监听

1)ActionListener 按钮监听

  • 描述

    • 用于接收动作事件的监听器,调用组件的addActionListener()方法,当事件被触发时,这个对象的actionPerformed()方法就被调用
    • 重写的方法内部用来描述事件触发时发生的动作
  • 代码示例

    • 编写一个窗口,当窗口中的Button按钮被点击,向控制台输出点击提示信息
    public class ButtonActionListeners {//Button事件监听练习public static void main(String[] args) {//创建并设置窗口与Button按钮Frame frame = new Frame("Button事件监听的练习");frame.setBounds(100, 100, 500, 500);frame.setVisible(true);Button button = new Button("Button");//将Button按钮居中放置在窗口中frame.add(button, BorderLayout.CENTER);//事件监听,对应的事件是Button按钮被点击//方法内的语句是Button按钮被点击之后执行的语句button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("Button按钮被点击了");}});//窗体关闭设置frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
    }
    • 多个Button按钮共享一个事件的练习
    public class ButtonActionListeners2 {//多个Button按钮共享同一个监听事件public static void main(String[] args) {//创建并设置窗口Frame frame = new Frame("多个事件共享一个监听事件");frame.setBounds(100, 100, 500, 500);frame.setLayout(new GridLayout(3, 1));//创建多个Button按钮Button button1 = new Button("Button1");Button button2 = new Button("Button2");Button button3 = new Button("Button3");//创建自定义事件监听类对象MyActionListener myActionListener = new MyActionListener();//将多个Button按钮与自定义事件监听类对象绑定button1.addActionListener(myActionListener);button2.addActionListener(myActionListener);button3.addActionListener(myActionListener);//将Button按钮填充进窗口中frame.add(button1);frame.add(button2);frame.add(button3);//关闭窗口的练习frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});frame.setVisible(true);}
    }/*** 自己实现的Button按钮的事件监听类*/
    class MyActionListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {String command = e.getActionCommand();//得到触发事件的Button按钮的名称System.out.println(command + "被点击了");}
    }

2)ActionListener 输入框监听

  • 描述

    • 监听文本框中输入的文字
    • 按下回车就会触发该事件
  • 代码练习

    • 编写程序,向输入框中输入,当按下回车时,将当前文本框中的文字打印到控制台上,并清空输入框
    public class TextFiledActionListeners {//文本框监听器public static void main(String[] args) {//Main方法仅作为程序的启动器使用/* //设置替换编码textField.setEchoChar('*');*/new MyTextFrame("文本框监听器的练习");}
    }class MyTextFrame extends Frame {public MyTextFrame(String frameName) {//创建窗口对象并设置属性super(frameName);this.setBounds(100, 100, 500, 500);this.setVisible(true);//创建文本框TextField textField = new TextField();textField.setBounds(150, 150, 50, 200);//将文本框装进窗口中this.add(textField);//将文本框与自定义文本事件监听器绑定MyTestActionListener myTestActionListener = new MyTestActionListener();textField.addActionListener(myTestActionListener);//窗口关闭按钮实现this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
    }/*** 创建自定义的文本事件监听器*/
    class MyTestActionListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {//当按下回车时,此事件触发TextField textField = (TextField) e.getSource();//得到与之关联的文本框String text = textField.getText();//得到文本框中输入的文本System.out.println(text);textField.setText("");//将文本框中的文本清空}
    }

3)简易计算器练习

  • 问题描述

    • 编写一个简易的计算器,能够计算两个数的和,窗口界面如下:

public class SimpleCalculatorExercise {//简单计算机练习public static void main(String[] args) {//主方法只是作为启动器使用new MyCalcFrame("简易计算器练习");}
}/*** 自定义的窗口类*/
class MyCalcFrame extends Frame {public MyCalcFrame(String frameName) {//创建并设置窗口属性super(frameName);this.setBounds(100, 100, 500, 500);this.setVisible(true);this.setLayout(new FlowLayout());//定义窗口的布局方式为流式布局//创建3个文本框TextField textField1 = new TextField();TextField textField2 = new TextField();TextField textField3 = new TextField();//创建一个标签tableLabel label = new Label("+");//创建一个按钮ButtonButton button = new Button("=");//将组件添加进窗口this.add(textField1);this.add(label);this.add(textField2);this.add(button);this.add(textField3);//关联Button事件监听器MyCalcActionListener myCalcActionListener = new MyCalcActionListener(textField1, textField2, textField3);button.addActionListener(myCalcActionListener);//窗口结束设计this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
}/*** 自定义的文本事件监听器*/
class MyCalcActionListener implements ActionListener {private TextField textField1, textField2, textField3;public MyCalcActionListener(TextField textField1, TextField textField2, TextField textField3) {this.textField1 = textField1;this.textField2 = textField2;this.textField3 = textField3;}@Overridepublic void actionPerformed(ActionEvent e) {//获得文本框1与文本框2的数字int num1 = Integer.parseInt(textField1.getText());int num2 = Integer.parseInt(textField2.getText());//将两个文本框的值的和填进第三个文本框中textField3.setText("" + (num1 + num2));//将前两个文本框清空textField1.setText("");textField2.setText("");}
}
  • 面向对象的写法
public class SimpleCalculatorExercise2 {//简单计算机练习,将窗口作为参数传递给事件监听器public static void main(String[] args) {//主方法只是作为启动器使用new MyCalcFrame2("简易计算器练习将窗口对象作为参数,");}
}/*** 自定义的窗口类*/
class MyCalcFrame2 extends Frame {public TextField textField1, textField2, textField3;//定义成员变量,三个文本框public MyCalcFrame2(String frameName) {//创建并设置窗口属性super(frameName);this.setBounds(100, 100, 500, 500);this.setVisible(true);this.setLayout(new FlowLayout());//定义窗口的布局方式为流式布局//创建3个文本框textField1 = new TextField();textField2 = new TextField();textField3 = new TextField();//创建一个标签tableLabel label = new Label("+");//创建一个按钮ButtonButton button = new Button("=");//将组件添加进窗口this.add(textField1);this.add(label);this.add(textField2);this.add(button);this.add(textField3);//关联Button事件监听器MyCalcActionListener2 myCalcActionListener2 = new MyCalcActionListener2(this);button.addActionListener(myCalcActionListener2);//窗口结束设计this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
}/*** 自定义的文本事件监听器,将窗口对象作为参数传递*/
class MyCalcActionListener2 implements ActionListener {private MyCalcFrame2 myCalcFrame2;//成员变量窗口对象public MyCalcActionListener2(MyCalcFrame2 myCalcFrame2) {//构造方法得到窗口对象,使用窗口对象得到三个文本框this.myCalcFrame2 = myCalcFrame2;}@Overridepublic void actionPerformed(ActionEvent e) {//获得文本框1与文本框2的数字int num1 = Integer.parseInt(myCalcFrame2.textField1.getText());int num2 = Integer.parseInt(myCalcFrame2.textField2.getText());//将两个文本框的值的和填进第三个文本框中myCalcFrame2.textField3.setText("" + (num1 + num2));//将前两个文本框清空myCalcFrame2.textField1.setText("");myCalcFrame2.textField2.setText("");}
}
  • 内部类写法

    • 内部类可以直接访问外部类的属性与方法,降低访问成本
public class SimpleCalculatorExercise3 {//简单计算机练习,使用成员内部类public static void main(String[] args) {//主方法只是作为启动器使用new MyCalcFrame3("简易计算器练习,使用成员内部类");}
}/*** 自定义的窗口类*/
class MyCalcFrame3 extends Frame {private TextField textField1, textField2, textField3;//定义成员变量,三个文本框public MyCalcFrame3(String frameName) {//创建并设置窗口属性super(frameName);this.setBounds(100, 100, 500, 500);this.setVisible(true);this.setLayout(new FlowLayout());//定义窗口的布局方式为流式布局//创建3个文本框textField1 = new TextField();textField2 = new TextField();textField3 = new TextField();//创建一个标签tableLabel label = new Label("+");//创建一个按钮ButtonButton button = new Button("=");//将组件添加进窗口this.add(textField1);this.add(label);this.add(textField2);this.add(button);this.add(textField3);//关联Button事件监听器MyCalcActionListener3 myCalcActionListener3 = new MyCalcActionListener3();button.addActionListener(myCalcActionListener3);//窗口结束设计this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}/*** 自定义的文本事件监听器* 内部类可以随意访问外部类的成员*/class MyCalcActionListener3 implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {//获得文本框1与文本框2的数int num1 = Integer.parseInt(textField1.getText());int num2 = Integer.parseInt(textField2.getText());int num3 = num1 + num2;//将两个文本框的值的和填进第三个文本框中textField3.setText("" + num3);//将前两个文本框清空textField1.setText("");textField2.setText("");}}
}

4)画笔 paint

  • 描述

    • 可以使用画笔绘制图案,图片图标等
  • 代码示例

    • 绘制两个实心圆,两个空心圆,艳秋四个图案的颜色不一致
    public class PaintTest {//画笔练习public static void main(String[] args) {new MyPaint();}
    }class MyPaint extends Frame {//自定义的画笔类public MyPaint() {this.setBounds(100, 100, 500, 500);this.setVisible(true);//窗口关闭按钮this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}@Overridepublic void paint(Graphics g) {g.setColor(Color.RED);//设置画笔颜色g.drawOval(150, 150, 50, 50);//绘制空心圆,参数分别是位置与圆的大小g.setColor(Color.YELLOW);g.fillOval(200, 150, 50, 50);//绘制实心圆g.setColor(Color.BLUE);g.fillOval(150, 200, 50, 50);g.setColor(Color.GREEN);g.drawOval(200, 200, 50, 50);g.setColor(Color.BLACK);//使用完画笔之后,将画笔的颜色还原为黑色}
    }

5)MouseListener 鼠标监听

  • 描述

    • 用来接收于鼠标相关的事件(按下、释放、双击等)的监听器
  • 代码示例

    • 使用鼠标在花瓣上画点,单击实现
    public class MouseMonitors {//使用鼠标在窗口上绘制点public static void main(String[] args) {new MyFrame("我的画板");}
    }class MyFrame extends Frame {//创建我的窗口类ArrayList<Point> points;//定义点集合public MyFrame(String frameName) {super(frameName);this.setBounds(100, 100, 500, 500);this.setVisible(true);points = new ArrayList<>();/*** 将鼠标点击事件的实现* 将窗口与鼠标单机事件连接起来*/this.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {MyFrame frame = (MyFrame) e.getSource();points.add(e.getPoint());//得到鼠标点击时点的坐标,并添加进点集合中frame.repaint();//鼠标每点击一次,就让画板上的点重新画一次,让新的点刷新出来}});/*** 负责窗口关闭按钮功能的实现*/this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}/*** 画笔、负责绘制集合中的点*/@Overridepublic void paint(Graphics g) {Iterator<Point> iterator = points.iterator();//获得集合的迭代器while (iterator.hasNext()) {//遍历点集合,并画出来Point point = iterator.next();//得到点g.setColor(Color.red);g.fillOval(point.x, point.y, 20, 20);//绘制用户点击的点}}
    }

6)WindowListener 窗口监听

  • 描述

    • 用于接收窗口事件的监听器
  • 代码练习

    • 实现窗口的关闭按钮,当窗口被激活时,改变窗口的标题
    public class WindowListeners {//窗口监听的练习public static void main(String[] args) {new MyWindowFrame("我的窗口监听的练习");}
    }/*** 自定义窗口类*/
    class MyWindowFrame extends Frame {public MyWindowFrame(String title) throws HeadlessException {super(title);this.setBounds(100, 100, 500, 500);this.setVisible(true);//将窗口与窗口监听事件绑定this.addWindowListener(new WindowAdapter() {//窗口关闭@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}//窗口激活,得到焦点@Overridepublic void windowActivated(WindowEvent e) {MyWindowFrame frame = (MyWindowFrame) e.getSource();frame.setTitle("被激活的窗口");}});}
    }

7)KeyListener 键盘监听

  • 描述

    • 接听键盘事件的监听器
  • 代码练习

    • 当用户按下的方向键时,在控制台打印用户按下了什么键,否则输出用户按下键的键值
    public class KeyboardMonitors {//键盘监听的练习public static void main(String[] args) {new MyKeyboardFrame("键盘监听的练习");}
    }/*** 自定义的窗口类*/
    class MyKeyboardFrame extends Frame {public MyKeyboardFrame(String total) {super(total);this.setBounds(100, 100, 500, 500);this.setVisible(true);/*** 将键盘与窗口绑定起来*/this.addKeyListener(new KeyAdapter() {//与键盘按下事件相对应@Overridepublic void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();//得到按下的键对应的值、//除了方向键打印具体的键,其他键打印键值if (keyCode == KeyEvent.VK_UP) {System.out.println("你按下了方向上键");} else if (keyCode == KeyEvent.VK_DOWN) {System.out.println("你按下了方向下键");} else if (keyCode == KeyEvent.VK_LEFT) {System.out.println("你按下了方向左键");} else if (keyCode == KeyEvent.VK_RIGHT) {System.out.println("你按下了方向右键");} else {System.out.println("你按下的键的值是:" + keyCode);}}});//设置窗口关闭按钮this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
    }

Java GUI-AWT详解相关推荐

  1. Java基础--awt详解以及简单应用

    GUI 图形用户界面 CLI 命令行用户接口 Java为GUI提供的对象存在java.Awt和Javax.Swing两个包中. Java当中如何完成图形化界面的制作呢? AWT:abstract Wi ...

  2. Java期末复习题详解

    Java期末复习题详解 选择题 1 .class: .java: .cpp: .txt: 2 3 4 封装: 继承: 覆盖: 重载: 5 构造函数: 特点: 6 异常处理: 注:catch可以进行多重 ...

  3. Java操作MongoDB详解

    Java操作MongoDB详解 1. MongoDB概述 1.1 MongoDB简介 1.2 MongoDB概念 2. MongoDB安装 2.1 MongoDB下载 2.2 MongoDB安装 2. ...

  4. Java内存溢出详解之Tomcat配置

    Java内存溢出详解 转自:http://elf8848.iteye.com/blog/378805 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError ...

  5. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  6. Java类加载机制详解【java面试题】

    Java类加载机制详解[java面试题] (1)问题分析: Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数 ...

  7. Java线程池详解学习:ThreadPoolExecutor

    Java线程池详解学习:ThreadPoolExecutor Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) - zhangpeterx的博客 在源码的目录java/util/ ...

  8. Java 线程池详解学习:FixedThreadPool,CachedThreadPool,ScheduledThreadPool...

    Java常用的线程池有FixedThreadPool和CachedThreadPool,我们可以通过查看他们的源码来进行学习. Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) ...

  9. 关于Java的Classpath详解

    关于Java的Classpath详解 Java 的新入门者对classpath往往比较困惑,为何在开发环境中能运行的东东出去就不好,或在外面运行的东东挺溜的进了开发环境就死菜. java的优点就是他是 ...

  10. java异常体系结构详解

    java异常体系结构详解 参考文章: (1)java异常体系结构详解 (2)https://www.cnblogs.com/hainange/p/6334042.html 备忘一下.

最新文章

  1. Lua(Codea) 中 table.insert 越界错误原因分析
  2. 深度对话之小舟与他的无限世界
  3. 桌面消息提醒_对win7的支持已近尾声,如何关闭不断弹出的提醒通知
  4. 荷兰人发明的新客机是劈叉的!乘客坐在机翼上
  5. 21个WordPress店铺必备免费工具
  6. JavaScript学习(七十四)—递归函数
  7. 重访 list comprehension
  8. oracle 改redo表空间,Oracle临时表空间查看、添加临时表空间数据文件、修改默认临时表空间 方法!...
  9. 【转】PP模块快速入门之功能简介
  10. React中使用jsoneditor
  11. 友达37寸长条液晶屏P370IVN04.1-原厂长条屏
  12. 路飞项目整体路程(六)
  13. html5全景图微信查看,在微信上怎么展示全景图片?
  14. 2021年中国皮革行业市场现状分析,PU合成革趋势明显,汽车皮革是关键需求「图」
  15. 百度阿里网易大疆等大小厂前端校招面筋 1
  16. Stream流的具体使用讲解
  17. 【转】 http请求包含什么
  18. spring integration-概述
  19. 互联网协议 — PPP 与 PPTP 点对点协议
  20. SAP中关于生产版本及成本收集器的联动处理

热门文章

  1. Android 美团批量打包新方案
  2. 基于HTML/CSS/JS的年龄计算器 | 带有免费源码
  3. Java 常用正则表达式整理
  4. Mysql循环插入数据
  5. Qt tabwidget 标签页设置tabbar标题,tabwidget设置透明色
  6. 电脑问题【关不死机(假死)】【tree命令列出文件目录树】【局域网电脑互联】【彻底禁用antimalware service executable】[应用程序无法正常启动(0xc000007b)]
  7. 1742: 判断奇偶数?(C语言)
  8. centos 彻底卸载软件包(含依赖)并解决安装冲突包问题
  9. linux系统防火墙开放端口
  10. Mac下载My sql及使用管理工具sequel pro连接数据库