java .net 图形界面_.Net转Java自学之路—基础巩固篇十六(GUI)

本文介绍了图形用户界面(GUI)的概念,包括CLI与GUI的区别。重点讲解了Java中的AWT和Swing包,以及两者在GUI开发中的角色。详细阐述了各种布局管理器如FlowLayout、BorderLayout等,并探讨了事件监听机制,包括监听器接口、事件源和事件处理。此外,还展示了如何在Java中创建基本的GUI组件,如Frame、Button和TextField,并添加监听器。最后提到了打Jar包的相关操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GUI

图形化用户界面。Graphical User Interface 图形用户接口

CLI:Command line User Interface 命令行用户接口;常见的DOS命令行操作

Java为GUI提供的对象都存在Java.AWT、Java.Swing包中。

AWT:Abstrace Window ToolKit  抽象窗口工具包;需调用本地系统方法实现功能。属于重量级控件。

Swing:在AWT的基础上,建立了一套图形界面系统。增强了移植性,属于轻量级控件。

AWT体系中 Component 类为基类。Container 为容器,是一个特殊组件,该组件中可以通过add添加其他组件。

常见的布局有:

FlowLayout:流式布局;从左到右的顺序排列。Panel默认的布局

BorderLayout:边界布局;东、南、西、北、中。是Frame默认的布局

GridLayout:网格布局;规则的矩形

CardLayout:卡片布局;选项卡

GridBagLayout:网格包布局;非规则矩形

事件监听机制:

1、事件源:就是被操作的组件。

2、事件:会发生的一些事情。

每一个事件的发生,有可能对应的动作有很多。将这些动作与事件源关联起来即可。只要有一个动作发生,就可以引发对应的事件。但是多个动作直接和事件源关联,不利于应用和扩展。所以,将这些动作封装成一个对象。让对象与事件源关联即可。该封装后的对象就形象的称为监听器。

监听器和事件源相关联,当有外部动作作用到该事件源时,监听器就会自动判断这个动作,若该动作符合监听中的某个动作,那么,监听动作所对应的事件就会发生,该事件会被封装成一个事件对象,并传递给正在发生的这个动作,该动作其实就是一个函数;这个函数会执行并对事件进行处理。

窗体事件监听的接口:WindowListener 处理窗口事件的类要么实现此接口所有的方法;要么扩展抽象类WindowAdapter 重新需要的方法。

方法包含有:

windowActiveted(WindowEvent e);活动Window时发生。

windowClosed(WindowEvent e);调用dispose而将其关闭时发生。

windowClosing(WindowEvent e);从窗口的系统菜单中关闭窗口时发生。

windowDeactiveated(WindowEvent e);不再是活动窗体时发生。

windowDeiconified(WindowEvent e);最大化。

windowIconified(WindowEvent e);最小化。

windowOpened(WindowEvent e);首次加载时发生。

监听接口中,只要方法没有超过3个,该接口就没有适配器Adapter 。一般都有适配器。活动监听是没有适配器的。

活动监听:

按钮添加的都是活动监听。包括:按钮 button、菜单 menu 等。

addActionListener();添加活动监听

ActionListener();包含有一个方法:actionPerformed(ActionEvent e);

键盘监听:

addKeyListener();添加键盘监听

适配器KeyAdapter()包含有三个方法:

keyPerssend(KeyEvent e);按下时发生。

keyReleased(KeyEvent e);释放键时发生。

keyReleased(KeyEvent e);输入某个键时发生。

鼠标监听:

addMouseListener();鼠标监听

鼠标适配器MouseAdapter() 包含有五个方法:

mouseClicked(MouseEvent e);单击时发生

mouseEntered(MouseEvent e);鼠标进入时发生

mouseExited(MouseEvent e);鼠标离开时发生

mousePressed(MouseEvent e);按下时发生

mouseReleased(MouseEvent e);释放时发生

实例:基本功能简述

Frame f=new Frame("窗体名称");

f.setSize(with,height);//设置窗体大小

f.setLocation(x,y);//窗体出现屏幕的位置//或

f.setBound(x,y,with,height);//设置窗体大小,直接指定位置

f.setLayout(new FlowLayout());//设置布局方式

Button btn=new Button("按钮名称");//创建按钮

f.add(btn);//按钮添加到窗体

f.addWindowListener(new 监听事件());//addWindowListener()给窗体添加监听器。

//括号中new的监听器对象可以是继承WindowAdapter的自定义的监听器也可以是WindowAdapter 。例:class ClassName extends WindosAdapter{ }//或 使用匿名内部类

f.addWindowListener(newWindowAdapter(){public voidwindowClosing(WindowEvent e){

System.exit(0);//关闭对话框

}

});//按钮添加活动监听事件 注:按钮不能添加窗体监听事件

btn.addActionListener(newActionListener(){public voidactionPerformed(ActionEvent e){//Code......

}

});//键盘监听事件

btn.addKeyListener(newKeyAdapter(){public voidkeyPerssend(KeyEvent e){

e.getKeyChar();//键的字符

e.getKeyCode();//键的哈希值

KeyEvent.getKeyText(e.getKeyCode());//键的文本(键盘上的字符)。//组合键

e.isAltDown();//Alt键是否按下

e.isAltGraphDown();

e.isConsumed();//是否已经使用此事件

e.isControlDown();//Ctrl键是否按下

e.isShiftDown();//Shift键是否按下

}

});

TextField tf=new TextField(10);//文本框

f.add(tf);//定义文本框只能输入数字

tf.addKeyListener(newKeyAdapter(){public voidkeyPressed(KeyEvent e){int code=e.getKeyCode();if(!(code>=KeyEvent.CK_0 && code<=KeyEvent.VK_9))

e.consume();//取消事件默认处理效果;取消输入效果

}

});//Dialog 对话/提示框。Dialog 可以添加窗体事件监听

Dialog d=new Dialog(f,"提示框标题",false);//false:可以不关闭提示框的情况下操作主界面;true:必须关闭提示框才能操作主界面。

d.setSize(with,height);//大小

Lable lb=new Lable();//标签

d.add(lb);//给提示框添加文本内容

d.add(btn);//给提示框添加按钮

d.setText("提示信息");

d.setVisible(true);//弹出提示框

FileDialog fd=new FileDialog();//文件对话框

fd.setTitle("文件对话框标题");

fd.setMode(FileDialog.LOAD);//选中文件加载

fd.setMode(FileDialog.SAVE);//文件写入

fd.setVisible(true);

fd.getDirectory();//获取文件对话框的目录

fd.getFile();//获取此文件对话框的选中文件

fd.getFilenameFilter();//确定此文件对话框的文件名过滤器

fd.setDirectory(path);//文件对话框窗口目录设置为指定目录

fd.setFile(strfile);//文件对话框选定文件设置为指定文件

fd.filenameFilter();//文件对话框的文件名过滤器设置为指定过滤器

f.setVisible(true);//窗体显示与否

菜单系列:

MenuComponent    extends Object

>>Menubar:菜单栏

>>MenuItem:菜单项

>>>Menu:菜单

import java.awt.*;import java.awt.event.*;classClassName{privateFrame f;privateMenubar bar;privateMenuItem mi,childMi;privateMenu m,childM;

ClassName(){

init();

}public voidinit(){

f=new Frame("窗体标题");

f.setBount(x,y,with,height);

bar=newMenubar();

m=new Menu("菜单名");

mi=new MenuItem("菜单项名称");

childM=new Menu("子菜单");

childMi=new MenuItem("子菜单 菜单项名称");

childM.add(childMi);//子菜单

m.add(childM);

m.add(mi);

bar.add(m);

f.setMenubar(bar);

f.setVisible(true);

}private voidevent(){//一系列的事件监听Code...

}

}

打Jar包:

javac -d . 包名.java  将执行文件打包到当前目录“包名”文件夹下

jar -cvf my(jar包名).jar 包名  将包中的执行文件打jar包

当前打jar包的方式在配置文件中没有指定执行文件是那个类文件;故、需要新建一个清单信息文件,可以是任意文件。清单信息文件内容是固定格式的信息内容:

格式:

Main-Class: 包名.类名  (后要有回车键表示结束)

包名前面需要有一个空格,否则会报IO异常:invalid header field (无效标头字段名称)

类名后面需要有一个回车键表示结束,否则配置文件中会没有指定执行文件配置信息。

在打Jar 包时需读取清单信息文件内容,命令行变为:

jar -cvfm my(jar包名).jar 清单信息文件名 包名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值