java笔记28 GUI
来源:互联网 发布:知乎怎么回答 编辑:程序博客网 时间:2024/06/05 19:10
1. GUI
图形化界面Graphical User Interface 图形用户接口
用图形的方式来显示计算机操作的界面,方便直观
2. CLI
Command lineUser Interface 命令行用户接口
就是常见的dos命令行操作
需要记忆一些常用的命令,操作不直观
3. java为GUI提供的对象都存在java.Awt和java.Swing中
Awt:Abstract Window Tookit(抽象窗口工具包)
需要调用本地系统方法实现功能,属于重量级控件(比较依赖底层)
Swing:在Awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,完全由java实现,增强了移植性,属轻量级控件。
4. 布局管理器
容器中的组件的排放方式,就是布局。
常见的布局管理器:
FlowLayout(流式布局管理器)
从左到右的顺序排列。
Panel默认的布局管理器。
BorderLayout(边界布局管理器)
东,南,西,北,中
Frame默认的布局管理器。
GridLayout(网格布局管理器)
规则的矩阵
CardLayout(卡片布局管理器)
选项卡
GridBagLayout(网格包布局管理器)
非规则的矩阵
5. 创建图形化界面
1、创建frame窗体
2、对窗体进行基本设置
比如大小 位置 布局
3、定义组件
4、将组件通过窗体的add方法添加到窗体中
5、让窗体可视化,setVisible(true)
import java.awt.*;
import javax.swing.*;
public class H_01GUI {
public static void main(String[] args) {
Frame f=new Frame("my awt");
f.setSize(500, 400);//先横坐标 再右坐标,设置窗体大小
f.setLocation(400, 200);//设置出现位置(左上角到屏幕左上角的距离)
f.setLayout(new FlowLayout());//设置流式布局
Button b=new Button("一个按钮");//创建一个按钮
f.add(b);//按钮添加到框架中
f.setVisible(true);//设置可视化
}
}
此时没有功能,无法关闭
6. 事件监听机制
事件监听机制的特点
1、事件源: awi包、swing包中的图形界面组件
2、事件:每一个事件源都有自己特有的对应事件和共性事件(鼠标、键盘事件)
3、监听器:将可以出发某一个时间的动作都已经封装到监听器
以上三者在java中都已经定义好了
直接获取其对象就可以了
4、事件处理:
public abstract class WindowAdapter
extends Object
implements WindowListener, WindowStateListener, WindowFocusListener
接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。
正常应该使用
class Mywin implements WindowListener
{
覆盖7个方法、但只想要用关闭方法,其他动作都没没有用到,可是却必须复写,非常麻烦。
}
因为WindowAdapter已经实现了WindowListener接口
并覆盖了其中所有的方法,那么只要继承自WindowAdapter覆盖需要的方法即可
class Mywin extends WindowAdapter
{
}
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class H_04JianTing {
public static void main(String[] args) {
Frame f=new Frame("my awt");
f.setSize(500, 400);//先横坐标 再右坐标,设置窗体大小
f.setLocation(400, 200);//设置出现位置(左上角到屏幕左上角的距离)
f.setLayout(new FlowLayout());//设置流式布局
Button b=new Button("一个按钮");//创建一个按钮
f.add(b);//按钮添加到框架中
f.addWindowListener(new WindowAdapter()//对frame添加监听
{
public void windowClosing(WindowEvent e)//添加关闭监听
{
System.out.println("我关");
System.exit(0);
}
public void windowActivated(WindowEvent e)//添加活动监听
{
System.out.println("活了");
}
public void windowOpened(WindowEvent e)
{
System.out.println("我被打开了");
}
});
f.setVisible(true);//设置可视化 如果在监听事件前,那么监听“打开”将不会执行
}
}
class MyWin extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.out.println("window closing"+e.toString());
System.exit(0);//可以使用匿名内部类
}
}
7. 鼠标和键盘的监听
//给文本框添加键盘监听
tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
int code=e.getKeyCode();
if(!(code>KeyEvent.VK_0&&code<KeyEvent.VK_9))//判断输入的键是否是数字
{
System.out.println("输入错误");
e.consume();//不按照默认方式处理,屏蔽键
}
}
});
//给按钮添加键盘监听
but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
//
if(e.getKeyCode()==KeyEvent.VK_ESCAPE)
System.exit(0);
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
System.out.println("发送信息");
//System.out.println(e.getKeyChar()+"--"+e.getKeyCode());
}
});
//给按钮添加鼠标监听
but.addMouseListener(new MouseAdapter()
{
private int count=1;
private int clickCount=1;
public void mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入"+count++);
}
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount()==2)
System.out.println("双击动作"+clickCount++);
System.out.println("点击"+clickCount++);
}
});
8. 简易记事本程序
GUI难的地方在于设计好的布局。
后台程序起始比较简单,就是将对应的事件监听添加到对应的组件上。
以下是一个简易记事本程序
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class H_11MenuDemo
{
public static void main(String[] args)
{
new MenuDemo();
}
}
class MenuDemo
{
private Frame f;
private MenuBar mb;
private Menu fileMenu,subMenu;
private MenuItem openItem,saveItem,closeItem,subItem;
private TextArea ta;
private FileDialog openDia,saveDia;
private File file;
MenuDemo()
{
init();
}
public void init()
{
f=new Frame("my window");
f.setBounds(300, 200, 600, 500);
//f.setLayout(new FlowLayout()); 直接用边界布局
ta=new TextArea();
//实例化
mb=new MenuBar();
fileMenu=new Menu("文件");
openItem=new MenuItem("打开");
saveItem=new MenuItem("保存");
closeItem=new MenuItem("退出");
subItem=new MenuItem("文本文档");
subMenu=new Menu("新建");
//添加到菜单
subMenu.add(subItem);
fileMenu.add(subMenu);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
mb.add(fileMenu);//添加菜单到菜单条
f.setMenuBar(mb);//添加菜单条到框架
f.add(ta);
openDia=new FileDialog(f,"打开",FileDialog.LOAD);//打开窗口
saveDia=new FileDialog(f,"保存",FileDialog.SAVE);//保存窗口界面
myEvent();//添加监视器
f.setVisible(true);
}
private void myEvent()
{
saveItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(file==null)
{
saveDia.setVisible(true);
String dirpath=saveDia.getDirectory();
String filename=saveDia.getFile();
if(filename==null||dirpath==null)
return;//如果没有选择,则直接返回
file=new File(dirpath,filename);
}
BufferedWriter bufw=null;
try
{
bufw=new BufferedWriter(new FileWriter(file));
String text=ta.getText();
bufw.write(text);
bufw.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
finally
{
if(bufw!=null)
{
try {
bufw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
});
openItem.addActionListener(new ActionListener()//打开按钮的监听
{
public void actionPerformed(ActionEvent e)
{
openDia.setVisible(true);
String dirpath=openDia.getDirectory();
String filename=openDia.getFile();
if(filename==null||dirpath==null)
return;//如果没有选择,则直接返回
ta.setText("");
BufferedReader bufr=null;
String line=null;
try
{
bufr=new BufferedReader(new FileReader(newFile(dirpath,filename)));
while((line=bufr.readLine())!=null)
{
ta.append(line+"\r\n");
}
} catch (IOException e1)
{
throw new RuntimeException("读取失败");
}
finally
{
if(bufr!=null)
{
try {
bufr.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
});
subItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
new MenuDemo();//达到新建文件的效果
}
});
closeItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
运行效果
9. 可运行的jar包
打包
Javac –d c:\myclass MyMenuTest.java
Jar –cvf my.jar MyMenu
写一个txt 写明主函数
Main-Class: mymenu.MyMenuTest 回车
Class后面要加空格,最后要加回车
不然不能识别。
不带GUI的java程序可以打包,但是点击也没有用。
- java笔记28 GUI
- Java学习笔记-GUI
- java笔记 GUI
- java笔记-GUI编程
- GUI 【java笔记】
- JAVA复习笔记--------GUI
- java gui菜鸟笔记
- JAVA GUI笔记
- 【java笔记】覆盖 GUI paint()
- GUI学习笔记MyWindowDemo.java
- GUI学习笔记MyMenuDemo.java
- GUI学习笔记MyMenuTest.java
- 我的java笔记(GUI)
- Java SE学习笔记-GUI
- java自学笔记之GUI
- Java笔记---GUI( 图形用户界面)
- Java学习笔记:GUI基础
- Java学习笔记(GUI)
- Find Peak Element -- leetcode
- C语言宏定义
- 新的开始
- 网络编址与端口配置
- 目标检测的图像特征提取之(一)HOG特征
- java笔记28 GUI
- TextField的键盘的类型
- Effective C++ 条款5
- 浙江大学PAT_甲级_1084. Broken Keyboard (20)
- Eclipse J2EE+Maven+Tomcat(Jetty)构建Spring MVC项目
- 日经春秋 20150621
- CSS,background-image网页效果不显示问题
- 日经社説 20150621 協力の芽を育み強固な日韓関係を
- composer干嘛这么神经?