1、GUI基础概念
GUI(Graphical User Interface 图形用户接口)。
用图形的方式,来显示计算机操作的界面,这样更方便更直观。
CLI (Command Line User Interface命令行用户接口)
就是常见的dos命令操作。
需要记忆一些常用的命令,操作不直观。
举例:
创建文件夹删除或删除文件夹(一个通过图形化界面操作一个通过dos命令操作)
知识:
Java为GUI提供的对象都存在 java.Awt 和 javax.Swing两个包中。
2、Awt 和 Swing 区别?
java.Awt:Abstract Windows ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属重量级控件。(就是比较依赖于平台,根据系统的不同会有所差异。在Windows下编写的程序拿到Linus下运行界面会有所不同)。
javax.Swing :在AWT的基础上,建立的一套图形化界面系统,其中提供了更多的组件,而且完全由Java实现,增强了移植性,属轻量级控件。(通过Swing编写的界面在那个系统下都可以运行,跨平台性超强)
4、 布局管理器
布局就是组件在容器中的排放方式(好比教室中桌椅的摆放方式);
使用图形化界面时一定要画草图。
常见的布局管理器:
FlowLayout(流式布局管理器)
从左到到右的顺序排列(第一个出现在中间的位置)
Panel 默认的布局管理器
BorderLayout(边界布局管理器)
东,南,西,北,中(麻将模式 默认居中 如果初始化时没有指定位置则以最大面积填充之后的覆盖)
Frame 默认的布局管理器
GridLayout(网络布局管理器)
规则的矩阵(例如计算器的布局)
CardLayout(卡片布局管理器)
选项卡方式的
GridBagLayout(网格包式布局管理器)
非规则的矩阵
坐标式布局(想放哪放哪)
5、Container中的一些方法?
Component add (Component comp)将指定组件追加到此容器的尾部。
Component add (Component comp ,int index)将指定组件添加到此容器的给定位置上。
Frame中的构造函数:
Frame():构造一个最初不可见的 Frame 新实例()。
Frame(String title):构造一个新的、最初不可见的、具有指定标题的 Frame 对象。
void setVisible(boolean b)根据参数 b 的值显示或隐藏此组件
void setSize(int width横坐标, int height纵坐标)调整组件的大小,使其宽度为 width,高度为 height
void setLocation(int x, int y)将组件移到新位置
void setLayout( LayoutManager mgr) 设置此容器的布局管理器
import java.awt.*;
class GuiDemo
{
public static void main(String[] args)
{
Frame F = new Frame("我的java窗口");
F.setVisible(true);
F.setSize(500,300);
F.setLocation(500,200);
Button b = new Button("按钮");
F.add(b);//将按钮添加到窗体中
F.setLayout(new FlowLayout());//将窗体设置为流式布局的布局,默认是居中
}
}
6、事件监听机制?
事件监听机制的几个特点:
1、事件源(就是awt包或者swing包中的那些图形化界面组件)
2、事件(每一个事件源都有自己特有的对应事件和共性事件)
3、监听器(把可以触发某个事件的动作都,都已经封装到了监听器中)
4、事件处理(自己要编写的部分,就是对产生动作进行处理)
7、窗体事件
方法:void addWindowListener(WindowListener l)添加指定的窗口侦听器,以从此窗口接收窗口事件。
而该方法传入的是WindowListener,其中WindowListener 是一个接口,所以要复写WindowListener中的方法,比较麻烦,通过查看API发现WindowListener有一个抽象子类WindowAdapter它是一个空方法的类(其中的方法体都没有处理方式),所以通过自定义类去继承它覆写其中的方法。父类引用接受子类对象是可以的。通过匿名内部类也是可以的。
import java.awt.*; import java.awt.event.*; class GuiDemo { public static void main(String[] args) { Frame F = new Frame("我的java窗口"); F.setVisible(true); F.setSize(500,300); F.setLocation(500,200); Button b = new Button("按钮"); F.add(b);//将按钮添加到窗体中 F.setLayout(new FlowLayout());//将窗体设置为流式布局的布局,默认是居中 //添加指定的窗口侦听器,以从此窗口接收窗口事件,父类引用指向子类对象 //子类继承方式:F.addWindowListener(new myWindowListener() ); //匿名内部类方式 F.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("能关闭吗"); System.exit(0); } } ); } } import java.awt.*; import java.awt.event.*; class FrameDemo { //外部建立组件的引用 private Frame f; private Button b; //通过构造函数初始化 FrameDemo() { init(); } public void init() { //定义窗体 f=new Frame("我的java窗体"); //设置窗体属性 f.setBounds(300,400,300,400);//该方法是setSize()和setLocation()的结合 //初始化button并将button添加到窗体中 b=new Button("请按按钮"); f.add(b); f.setLayout(new FlowLayout()); //加载窗体上的事件 myEvent(); //显示窗体 f.setVisible(true); } //定义事件 private void myEvent() { //给窗体添加监听器 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("窗体关闭操作运行"); System.exit(0); } }); //给按钮添加监听器 //按钮时事件源 //窗体用addWindowListener监听button怎么添加监听器呢 //通过查看API看到button选择的监听器是 //想要知道哪个组件具备什么样的特有监听,就查看该组件的API b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("按钮活动事件执行"); System.exit(0); } }); } } class ActionDemo { public static void main(String[] args) { System.out.println("生成窗体啦"); FrameDemo F = new FrameDemo(); } }
9、鼠标事件
import java.awt.*; import java.awt.event.*; class fraemDemo { private Frame f; private Button b; fraemDemo() { init(); } private void init() { f=new Frame("鼠标键盘事件窗口"); f.setBounds(100,200,200,100); f.setLayout(new FlowLayout()); b=new Button("鼠标事件按钮"); f.add(b); f.setVisible(true); //添加事件 addEvent(); } private void addEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("窗口关闭"); System.exit(0); } }); b.addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent m) { System.out.println("鼠标在此经过"); } public void mouseClicked(MouseEvent m) { if(m.getClickCount()==2) System.out.println("双击动作执行"); } }); } } class mouseAndKeyEvent { public static void main(String[] args) { new fraemDemo(); } }
10、键盘事件
键盘KeyAdapter中需要覆写的方法
void keyPressed(KeyEvent e)
按下某个键时调用此方法。
void keyReleased(KeyEvent e)
释放某个键时调用此方法。
void keyTyped(KeyEvent e)
键入某个键时调用此方法。
键盘事件和其他事件用法相同 ,需要了解一下键盘事件对象中的一些方法
char getKeyChar() 返回与此事件中的键关联的字符
int getKeyCode() 返回与此事件中的键关联的整数 keyCode。
组合键
boolean isAltDown()
返回 Alt 修饰符在此事件上是否为 down。
boolean isAltGraphDown()
返回 AltGraph 修饰符在此事件上是否为 down。
boolean isConsumed()
返回是否已经使用此事件。
boolean isControlDown()
返回 Control 修饰符在此事件上是为 down。
boolean isMetaDown()
返回 Meta 修饰符在此事件上是否为 down。
boolean isShiftDown()
返回 Shift 修饰符在此事件上是否为 down。
static String getKeyText(int keyCode)
返回描述 keyCode 的 String,如 "HOME"、"F1" 或 "A"。
void consume()
使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件。
相关代码:
import java.awt.*; import java.awt.event.*; class KeyEventDemo { private Frame f; private Button b; private TextField tf; KeyEventDemo() { init(); } private void init() { f = new Frame("键盘事件窗口"); b = new Button("按钮"); tf = new TextField(10); f.setVisible(true); f.setLayout(new FlowLayout()); f.setBounds(300,300,300,300); f.add(tf); f.add(b); addEvent(); } private void addEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); b.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent m) { System.out.println("按钮上的鼠标事件"); } }); tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent k) { int code =k.getKeyCode(); if(!(code >= 96 && code <=105)) { System.out.println(code+"输入字母非法"); k.consume(); } } }); } public static void main(String[] args) { new KeyEventDemo(); } }
11、练习——通过图形化界面列出指定目录下的文件
package one; import java.awt.*; import java.awt.event.*; import java.io.*; class AwtFileList { private Frame f; private Button b; private TextField tf; private TextArea ta; AwtFileList() { init(); } public void init() { f= new Frame("列出目录下清单"); f.setLayout(new FlowLayout()); b=new Button("转到"); tf=new TextField(41); ta=new TextArea(20,40); f.setBounds(200,200,400,400); f.add(tf); f.add(b); f.add(ta); addEvent(); f.setVisible(true); } public void addEvent() { f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent w) { System.exit(0); } }); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { String dir = tf.getText(); //tf.setText(""); File f = new File(dir); if(f.exists() && f.isDirectory()) { ta.setText("");//清空 String[] list = f.list(); for(String l : list) { ta.append(l+"\r\n"); } } else { //ta.setText(""); ta.setText("您输入的目录有误,请查看后继续操作"); } } }); } public static void main(String[] args) { new AwtFileList(); } } 12、菜单——记事本 import java.awt.*; import java.awt.event.*; import java.io.*; class NotepadDemo { private Frame f; private MenuBar mb; private Menu file,edit,format,see,hlep; private MenuItem save,open,exit; private TextArea textArea; private FileDialog openDlg,saveDlg; private File fil; NotepadDemo() { init(); } public void init() { //窗体初始化 f =new Frame("记事本"); f.setBounds(400,100,600,530); //菜单栏初始化 mb = new MenuBar(); //菜单初始化 file=new Menu("文件(F)"); edit= new Menu("编辑(E)"); format= new Menu("格式(O)"); see= new Menu("查看(V)"); hlep= new Menu("帮助(H)"); //菜单项初始化 save = new MenuItem("保存"); open = new MenuItem("打开"); exit = new MenuItem("退出"); //文本区域初始化 textArea = new TextArea(); //文件对话框初始化 //FileDialog(Frame parent, String title, int mode) //创建一个具有指定标题的文件对话框窗口,用于加载或保存文件。 //mode - 对话框的模式,可以是 FileDialog.LOAD 或 FileDialog.SAVE openDlg = new FileDialog(f,"打开文件",FileDialog.LOAD ); saveDlg = new FileDialog(f,"保存文件",FileDialog.SAVE); //添加组件 f.setMenuBar(mb); f.add(textArea); mb.add(file); mb.add(edit); mb.add(format); mb.add(see); mb.add(hlep); // file.add(open); file.add(save); file.add(exit); //显示窗体 enent();//调用事件 f.setVisible(true); } //定义事件 public void enent() { //窗体事件 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent w) { System.exit(0); } }); //菜单事件 //退出项 exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { System.exit(0); } }); //打开事件 open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { openDlg.setVisible(true); //通过文件对话框对象中的方法获取 路径和文件名 //Strinig getDirectory() 获取此文件对话框的目录。 //String getFile() 获取此文件对话框的选定文件。 String path = openDlg.getDirectory(); String fileName =openDlg.getFile(); //如果在文件对话框中没有操作文件 不做任何动作 if(path==null || fileName==null) return; //清空文本区域 textArea.setText(""); f.setTitle(fileName+"-记事本"); fil = new File(path,fileName); try { BufferedReader bfr = new BufferedReader(new FileReader(fil)); String line = null; while((line = bfr.readLine())!=null) { textArea.append(line+"\r\n"); } bfr.close(); } catch (Exception e) { throw new RuntimeException("读取失败"); } } }); //保存事件 save.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { //如果文件不存在 if(fil==null) { saveDlg.setVisible(true); String path = saveDlg.getDirectory(); String fileName =saveDlg.getFile(); //如果在文件对话框中没有操作文件 不做任何动作 if(path==null || fileName==null) return; fil=new File(path,fileName); } try { BufferedWriter bfw = new BufferedWriter(new FileWriter(fil)); //获取文本区域中的内容 String text = textArea.getText(); bfw.write(text); bfw.flush(); bfw.close(); } catch (Exception e) { throw new RuntimeException("保存失败"); } } }); } public static void main(String[] args) { new NotepadDemo(); } }
13、配置清单
让自己编写的程序能双击打开运行,怎么做呢?
1、一个程序产生许多类,我们可以通过命令将类封装到包中
javac -d c:\abc(要存放的目录) NotepadDemo.java
2、通过jar命令将目录中的文件做成jar包
jar -cvf note.jar(自己命名) NoteDemo(被打包的文件夹名称)
3、但产生的jar包需要自己配置清单 指定哪个类先运行
自己创建一个.txt文件,打开文件手动配置清单 格式是:
Main-Class : 空格 包名.类名 (回车必须要有)
之后再通过jar命令将.txt文件和类文件夹一起打包
jar -cvfm note.jar a.txt NoteDemo
相关推荐
在"java图形化界面编程资料.zip"这个压缩包中,"资料"可能包含了关于AWT和Swing组件的详细介绍,"文档"可能包含了教程、API参考和示例代码,而"代码"目录则可能包含了一些实例代码,供学习者参考和实践。通过这些...
黑马程序员__移动商城项目实战 包括黑马程序员乐淘商城实战和慕课React+Antd
公式指标,黑马起爆,有助于判断什么时候可以入手
Java GUI(图形用户界面)是Java编程中的一个重要领域,它允许开发者创建交互式的应用程序,让用户通过视觉元素与程序进行互动。在本视频教程“黑马程序员_毕向东_Java基础视频教程第22天-06-GUI(Action事件)”中,...
根据提供的文档标题、描述以及部分链接内容,我们可以总结出以下关于使用C++和Qt进行GUI图形用户界面开发来实现数据库的增删改查操作的相关知识点: ### 一、C++与Qt简介 - **C++**:一种面向对象的编程语言,支持...
在Java中,主要使用Java Swing库来实现GUI(图形用户界面)设计。本教程针对已有一定Java基础的学习者,旨在帮助他们深入理解并掌握Java Swing的使用。 Java Swing提供了一系列组件,如按钮、文本框、标签、滚动...
在这个项目中,开发者运用了Java的图形用户界面(GUI)技术来构建游戏界面,使得用户能够直观地看到棋盘并进行操作。下面我们将深入探讨这款程序涉及的关键知识点: 1. **Java GUI**:Java GUI(图形用户界面)是...
描述中提到“广西电商项目数据表和数据”,这意味着该压缩包内可能包含了广西电商项目的实际数据集,这些数据可能存储在如"data.sql"和"ECPS_GUIZHOU2.sql"这样的文件中。数据表是数据库中的一个结构,用于组织和...
标题中的“heima_ugo_xiaochengxu_黑马训练营_微信小程序_小程序支付_VantWeapp商城”揭示了这是一个关于微信小程序开发的项目,由黑马训练营提供教学支持,特别关注了商城功能、微信登录和微信支付的集成,并且使用...
在这个课程中,你将深入学习如何构建一个功能完善的电商平台前端界面,提升你的前端开发技能。以下是这个课程可能涉及的一些关键知识点: 1. HTML5与CSS3基础:作为前端开发的基础,HTML5用于结构化页面内容,CSS3...
下面将详细介绍JavaWeb的基本概念、核心技术和黑马程序员源码在学习过程中的作用。 1. **JavaWeb基础** JavaWeb是基于Java技术构建Web应用的框架,它包括Servlet、JSP(JavaServer Pages)、JSTL(JavaServer ...
《黑马程序员_hibernate框架开发2016版讲义...通过对黑马程序员提供的这门课程的学习,开发者不仅能掌握Hibernate的核心概念和技术,还能提升在实际项目中的数据库操作效率,为构建高效、稳定的Java应用打下坚实基础。
黑马程序员_张孝祥_Java多线程与并发库,老师讲的非常仔细,老师很有耐心.欢迎大家下载学习.
黑马程序员_毕向东_Java基础视频教程第18天-14-IO流(拷贝文本文件图例).zip
"黑马旅游网项目"可能是一个模拟真实旅游网站的示例应用,通过这个项目,学习者可以实践如何构建一个用户可以浏览旅游信息、预订旅行服务的Web平台。基础部分意味着它会涵盖Web开发的基本流程,包括前端页面设计、...
【标题】"传智播客_黑马_品优购_2018"指的是一个由传智播客和黑马程序员联合推出的2018年品优购相关的IT培训课程资源。这个课程可能涵盖了电子商务、互联网产品开发、运营等多个方面,旨在帮助学员掌握最新的技术和...
重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip
【标题】"Pinyougou_html_css_黑马程序员_" 指的是一个关于HTML和CSS的实战项目,这个项目可能是由“黑马程序员”这个知名的在线教育平台提供的。"品优购"可能是该项目的一个虚构的电商网站名称,目的是为了让学生...
【标题】"01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip" 提供的是一门由黑马程序员机构推出的Java基础强化课程,由讲师张孝祥主讲,旨在深入讲解Java编程的基础知识并进行能力提升。 【描述】中提到...
《Hibernate框架深度解析——基于黑马程序员2016版教学资料》 Hibernate,作为一个强大的对象关系映射(ORM)框架,极大地简化了Java开发者在数据库操作中的工作。它通过提供数据持久化的对象模型,使得开发者可以...