Java基础——GUI编程和Applet

本文详细介绍了Java中的GUI编程,包括GUI的概念、Awt和Swing的区别、常用组件和布局管理器的使用。同时讲解了事件监听机制,通过示例展示了事件处理流程。最后提到了Applet在网页中的应用,探讨了Applet的局限性和标记的使用。 摘要由CSDN通过智能技术生成

33、GUI

概述

GUIGraphical User interface)图形用户接口

用图形的方式,来显示计算机操作的界面,这样更方便,更直观

CLICommand Line User Interface)命令行用户接口

就是常见的DOS命令行操作,需要记忆一些常用的指令,操作不直观

举例:比如创建文件夹,或者删除文件夹

JavaGUI提供的对象都存在Java.awtJava.swing两个包中

AwtSwing

Java.Awt: Abstract Windows Toolkit(抽象窗口工具包)需要调用本地系统实现功能,属于重量级控件

Java.Swing:AWT基础上,建立一套图形界面系统,其中提供了更多的组件,而且完全由Java实现,增强了移植性,属于轻量级控件

名词解释

Component——组件

Contaner——容器——是一个特殊的组件,该组件可以通过add方法添加其他组件进来

Window——窗口

Panel——面板

Frame——框架

Dialog——对话框

FileDialog——文件对话框

Button——按钮

Label——标签

CheckBox——复选框

TextArea——文本框

TextField——文本区

布局

容器中的组件的排列方式——布局

常见的布局管理器

FlowLayout——流式布局管理器,从左到右顺序排列,Panel默认的布局管理器

BorderLayout——(东、南、西、北、中,Frame默认的布局管理器)

GridLayout——网格布局管理器,规则的矩阵

CardLayout——卡片布局管理器,选项卡

GridBayLayout——网格布局管理器,非规则的矩阵

Frame

创建图形界面的步骤

1、创建Frame窗体

2、对窗体进行基本设置,比如大小、位置、布局

3、定义组件

4、将组件通过窗体的add方法添加到窗体中

5、让窗体显示,通过setVisabletrue

package swin;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.SwingUtilities;

import javax.swing.UIManager;

import org.dyno.visual.swing.layouts.Constraints;

import org.dyno.visual.swing.layouts.GroupLayout;

import org.dyno.visual.swing.layouts.Leading;

//VS4E -- DO NOT REMOVE THIS LINE!

public class AutoDemo extends JFrame {

private static final long serialVersionUID = 1L;

private JButton jButton0;

private static final String PREFERRED_LOOK_AND_FEEL = "javax.swing.plaf.metal.MetalLookAndFeel";

public AutoDemo() {

initComponents();

}

private void initComponents() {

setLayout(new GroupLayout());

add(getJButton0(), new Constraints(new Leading(139, 10, 10), new Leading(131, 10, 10)));

setSize(320, 240);

}

private JButton getJButton0() {

if (jButton0 == null) {

jButton0 = new JButton();

jButton0.setText("按钮");

jButton0.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent event) {

jButton0MouseMouseClicked(event);

}

});

}

return jButton0;

}

private static void installLnF() {

try {

String lnfClassname = PREFERRED_LOOK_AND_FEEL;

if (lnfClassname == null)

lnfClassname = UIManager.getCrossPlatformLookAndFeelClassName();

UIManager.setLookAndFeel(lnfClassname);

} catch (Exception e) {

System.err.println("Cannot install " + PREFERRED_LOOK_AND_FEEL

+ " on this platform:" + e.getMessage());

}

}

/**

 * Main entry of the class.

 * Note: This class is only created so that you can easily preview the result at runtime.

 * It is not expected to be managed by the designer.

 * You can modify it as you like.

 */

public static void main(String[] args) {

installLnF();

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

AutoDemo frame = new AutoDemo();

frame.setDefaultCloseOperation(AutoDemo.EXIT_ON_CLOSE);

frame.setTitle("AutoDemo");

frame.getContentPane().setPreferredSize(frame.getSize());

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

});

}

private void jButton0MouseMouseClicked(MouseEvent event) 

{

System.out.println("你好!GUI");

}

}

事件监听机制

1、将监听器注册到事件源

2、有监听器所监听的动作作于事件源点

3、产生事件对象

4、将事件对象传给事件处理方式

事件监听机制的特点

1、事件源:awt包或者swing包中的图形界面组件

2、事件:每一个事件源都有自己特有的对应事件和共性事件

3、事件监听器:将可以触发某一个事件的动作都已经封装到了监听器中

4、事件处理:我们要做的就是对产生的动作进行处理

(前三条Java中已经定义好了,直接获取对象就可以了)

事件分类

MouseEvent 鼠标事件

WindowsEvent 窗口事件

ActionEvent 动作事件

按事件性质分类

低级事件

语义事件(又叫高级事件)

事件注意

1、一个事件监听器对象负责处理一类事件

2、一类事件的每一种发生情况,分别由事件监听器对象中的一个方法来具体处理

3、在事件源和事件监听器对象中进行约定的接口类,被称为事件监听器接口

4、事件监听器接口类名称与事件类的名称相对应,例如MouseEvent事件类的监听器接口为MouseListener

处理发生在GUI组件上的XX Event事件的某种情况,用事件处理的通用编写流程

1、编写一个实现XXXListener接口的事件监听器类

2、XXXListener类中用于处理该事件情况的方法中,编写处理代码

3、调用组件add XXXListener方法,将类XXXListener创建的实例对象注册到GUI组件上

事件适配器

JDK中也提供了大多数事件监听器接口的最简单的实现类,称之为适配器 Adapter

用事件适配器处理事件,可以简化事件监听器编写

初学者使用事件适配器时的常见问题和解决问题的思路

1、是方法没被调用还是程序代码的执行问题

2、是方法名写错了,还是没有注册事件监听器

package days18;

import java.io.*;

import java.awt.*;

import java.awt.event.*;

class  Awt

{

public static void main(String[] args) 

{

Frame f = new Frame("my awt");

f.setSize(500,400);

f.setLocation(300,200);

f.setLayout(new FlowLayout());

Button b = new Button("我是一个按钮");

f.add(b);

    f.addWindowListener(new WindowAdapter()

    {

     public void windowOpened(WindowEvent e)

     {

     System.out.println("我开了!!!");

     }

    

     public void windowClosing(WindowEvent e)

     {

     System.out.println("我关了");

     System.exit(0);

     }

    });

f.setVisible(true);

System.out.println("Hello World!");

}

}

事件处理的多重应用

1、如何知道一个GUI组件到底能够触发哪几种事件

2、一个组件上的一个动作可以产生多种不同类型的事件

3、一个事件监听器对象可以注册到多个事件源上

4、在一个事件源上也可以注册同一类事进行处理的多个事件监听器对象

package days18;

import java.io.*;

import java.awt.*;

import java.awt.event.*;

class  Fra

{

public static void main(String[] args) 

{

Frame f = new Frame("my awt");

f.setSize(500,400);

f.setLocation(300,200);

f.setLayout(new FlowLayout());

Button b = new Button("退出按钮");

b.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) 

{

System.out.println("按钮退出!!");

System.exit(0);

}

});

f.add(b);

        

    f.addWindowListener(new WindowAdapter()

    {

    

     public void windowClosing(WindowEvent e)

     {

     System.out.println("我关了");

     System.exit(0);

     }

    });

f.setVisible(true);

}

}

让按钮具备退出程序的功能,按钮是事件源,那么选择哪个监听器,通过关闭窗口示例了解到,想要知道哪个组件具备什么样特有的监听器,需要查看该组件对象的功能,通过查阅button的描述,发现按钮支持一个特有的监听器 addActionListener

键盘鼠标事件
package days18;

import java.awt.event.ActionEvent;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JTextField;

import javax.swing.SwingUtilities;

import javax.swing.UIManager;

import org.dyno.visual.swing.layouts.Constraints;

import org.dyno.visual.swing.layouts.GroupLayout;

import org.dyno.visual.swing.layouts.Leading;

//VS4E -- DO NOT REMOVE THIS LINE!

public class MK extends JFrame {

private static final long serialVersionUID = 1L;

private JButton jButton0;

public MK() {

initComponents();

}

private void initComponents() {

setLayout(new GroupLayout());

ad

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值