JAVA--图形界面化
来源:互联网 发布:八皇后问题递归算法 编辑:程序博客网 时间:2024/05/19 08:37
图形界面继承体系
Component
所有图形界面超类 抽象类,具有图形表示能力的类
Container
容器: 就是可以将对象存储进去
存储的是图形界面上的内容,菜单,按钮,文本框
Container子类
Window – 窗体 无边框的窗体
Frame – 具有标题和边框的窗体
Panel – 面板 窗体分割可以存储按钮容器
Dialog – 对话框,小的窗体,进行信息的提示
FileDialog – 文件对话框
Button 按钮
Label 文本标签 信息提示使用
checkbox 复选框
TextArea 多行文本区域
TextField 单行文本区域
java.awt.Frame 带有标题和边框的窗口
构造方法
Frame(String title)传递字符串的标题
显示窗体容器,调用Frame类的父类方法
setVisible(boolean b)传递true,就显示
对窗体进行设置
大小尺寸 父类方法 setSize(int width,int height) 数据单位像素
像素: 组成图像中最小的不可分割的实心小点
屏幕定位 父类方法 setLocation(int x,int y) X轴坐标,Y纵轴坐标
获取屏幕分辨率
Toolkit static Toolkit getDefaultToolkit() 返回的是类的子类对象
Toolkit.getDefaultToolKit().getScreenSize().width 返回是Dimension
设置窗体背景色
父类方法 setBackground
/* * 使用Frame类,实现图形界面 * 图形界面,是另一个线程在控制 */public class FrameDemo { public static void main(String[] args) { //创建Frame对象,写字符串标题 Frame f = new Frame("第一个窗体"); //父类方法setVisible f.setVisible(true); //获取屏幕分辨率 int h = Toolkit.getDefaultToolkit().getScreenSize().height; int w = Toolkit.getDefaultToolkit().getScreenSize().width; //尺寸设置,父类方法 setSize f.setSize(500, 400); //屏幕位置,父类方法 setLocation f.setLocation((w-500)/2, (h-400)/2); //设置背景色,父类方法setBackground f.setBackground(new Color(202,232,207)); }}
======================================================
按钮组件的使用
Button类
构造方法 Button(String label) 传递字符串的标签,标签就是按钮上写的字
设置位置,和尺寸的方式,和Frame窗体是一样
将按钮添加到窗体,使用的是窗体的方法add
/* * 按钮,添加到窗体上 */public class FrameDemo1 { public static void main(String[] args) { Frame f = new Frame("窗体添加按钮"); f.setVisible(true); int h = Toolkit.getDefaultToolkit().getScreenSize().height; int w = Toolkit.getDefaultToolkit().getScreenSize().width; f.setSize(500, 400); f.setLocation((w-500)/2, (h-400)/2); f.setBackground(new Color(202,232,207)); //设置布局管理,null 取消所有布局管理 //组件位置,可以任意放置,必须要定位和尺寸 f.setLayout(null); //创建按钮对象 Button but = new Button("确定"); Button but1 = new Button("取消"); //按钮添加到窗体中,窗体方法add f.add(but,BorderLayout.WEST); f.add(but1,BorderLayout.EAST); but.setSize(100, 30); but1.setSize(100, 30); but.setLocation(150, 50); but1.setLocation(280, 50);}}
=======================================================
事件监听机制
作用: 让图形界面,有一定功能产生,根据用户的实际操作,产生不同的功能
事件源:
就是用户可以直接操作的部分, 按钮,文本框,窗体,菜单
事件:
用户的操作方式, 鼠标,键盘,窗体事件
鼠标: 点击 鼠标悬停,离开
键盘: 按下 弹起
窗体: 打开 退出 最大最小
监听器: 类似于窃听器
一旦开始工作,就不停,工作在事件源上,事实监听用户的操作
只要用户操作了事件源,用户的动作就会被事件监听器抓住
根据不同的动作处理这个事件
处理方式:
就是程序中的方法,监听器会根据用户的动作不同,选择调用方法
a(){} b(){} c(){}
点击窗体上的叉子,窗体关闭
事件源: 窗体
事件: 关闭
监听器: 作用在窗体上监听器,监听用户对窗体的操作
点击的内容,调用处理方法
a(){} b(){}
/* * 事件监听机制,实现点击窗体上叉子,关闭窗体 */public class FrameDemo2 { public static void main(String[] args) { Frame f = new Frame("窗体关闭事件"); f.setBounds(200, 100, 500, 400); f.setVisible(true); //事件源,窗体,添加事件监听器 // addWindowListener //传递接收事件的接口的实现类对象,重写接口方法 //方法,监听器根据用户的操作,自行调用 //简化成了匿名的内部类实现,new 适配器类 /*f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } });*/ f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); }}//简化书写,自定义定义实现类,做接口的空实现//没有抽象方法的抽象类,接口的适配器类 //220V 电源适配器 -> 3.7 把你插座不想要的220V,变成你想要的3.7V//抽象类,将接口中,不想要的方法,适配你想要的方法//WindowAdapter 类的源代码 My 是一样的/*abstract class My implements WindowListener{ public void windowActivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowClosing(WindowEvent e) {} public void windowDeactivated(WindowEvent e){} public void windowDeiconified(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowOpened(WindowEvent e) {} }*//* * 自定义WindowListener实现类 *//*class MyListener extends WindowAdapter{ public void windowClosing(WindowEvent e) { System.exit(0); }}*/
最终版本的
写图形界面事件监听器的标准公式
导入 awt awt.event
事件源.addXXXListener(new XXXAdapter(){
public void EEE(XXXEvent e){
}
});
but.addMouseListener(new MouseAdater(){
public void MouseClicked(MouseEvent e){
}
});
================================================
鼠标事件,调用事件处理方法中, MouseEvent类
int getClickCount() 鼠标的在事件源上的点击次数
/* * 鼠标事件 * 按钮添加鼠标事件,点击,鼠标的悬停,鼠标离开 */public class FrameDemo3 { public static void main(String[] args) { Frame f = new Frame("按钮的鼠标事件"); f.setVisible(true); int h = Toolkit.getDefaultToolkit().getScreenSize().height; int w = Toolkit.getDefaultToolkit().getScreenSize().width; f.setSize(500, 400); f.setLocation((w-500)/2, (h-400)/2); f.setBackground(new Color(202,232,207)); f.setLayout(null); //创建按钮对象 Button but = new Button("确定"); but.setSize(100, 30); but.setLocation(150, 50); f.add(but); //对事件源按钮,添加事件监听器,鼠标事件 but.addMouseListener(new MouseAdapter() { //重写鼠标的点击调用方法 //MouseEvent类对象,是事件监听器调用方法自动传递 //鼠标信息,点击位置(按钮,屏幕)按下的键位1左键,2是滚轮,3是右键,点击次数 public void mouseClicked(MouseEvent e){ //调用MouseEvent类方法getClickCount方法获取鼠标点击次数 if(e.getClickCount()==2){ System.out.println("双击"); } } //鼠标移入时调用,悬停状态 public void mouseEntered(MouseEvent e) { System.out.println("鼠标移入到按钮"); } //鼠标离开时调用 public void mouseExited(MouseEvent e) { System.out.println("鼠标离开按钮"); } }); }}
单行文本
java.awt.TextField 表示可以编辑的单行文本
构造方法
空参数,文本框没有任何内容
传递字符串参数,文本框就会显示出,字符串
位置尺寸设置和Frame一样 setBounds
窗体容器add
String getText() 获取文本框内容,不写内容,返回的是 “”
void setText() 设置文本框内容
多行文本
java.awt.TextArea 表示可以编辑的多行文本
构造方法
空参数,文本框没有任何内容
传递字符串参数,文本框就会显示出,字符串
/* * 数据转移 * 文本框,单行文本 TextField * 多行文本区域,可以换行 TextArea * 在单行文本框,键盘键入内容,点击按钮,文本内容,从单行文本转移到多行中 */public class FrameDemo4 { public static void main(String[] args) { Frame f = new Frame("文本数据转移"); f.setVisible(true); int h = Toolkit.getDefaultToolkit().getScreenSize().height; int w = Toolkit.getDefaultToolkit().getScreenSize().width; f.setSize(500, 400); f.setLocation((w-500)/2, (h-400)/2); f.setBackground(new Color(202,232,207)); f.setLayout(null); //创建单行文本框 final TextField tf = new TextField(); //设置 tf.setBounds(40, 50, 300, 25); f.add(tf); //创建按钮 Button but = new Button("数据转移"); but.setBounds(380, 50, 60, 25); f.add(but); //创建多行文本框 final TextArea ta = new TextArea(); ta.setBounds(40, 90, 300, 200); f.add(ta); // ta.setFont(new Font("宋体",Font.BOLD,15)); //按钮,添加鼠标事件 but.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e){ //获取文本框内容 String text = tf.getText(); if("".equals(text)) return ; /*String os = System.getProperties().getProperty("os.name"); System.out.println(os); String line = null; if(os.startsWith("W")) line = "\r\n"; else line = "\n";*/ //将文本,设置到多行文本区域 ta.append(text+"\r\n"); //清空单行文本 tf.setText(""); } }); //窗体事件,程序关闭 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){System.exit(0);} }); }}
=====================================================
获取用户的按键,需要ASCII码,键盘上的键很多
KeyEvent 描述按下键盘后信息
KeyEvent 静态成员变量 ,需要的ASCII码
静态变量,变量名就是键盘上的键的名字,保存的数值就是这个键的码值
KeyEvent类方法
int getKeyCode 返回按下键的ASCII
char getKeyChar 返回按下键的字符
KeyEvent类的父类方法 consume()终止当前事件
KeyEvent类的父类方法可以判断按下的特殊键盘
isAltDown boolean isControlDown()
/* * 键盘事件,文本框 * 捕获到按下的键 * 阻止非法键 * 组合键 Ctrl+Enter */public class FrameDemo5 { public static void main(String[] args) { Frame f = new Frame("键盘事件"); f.setVisible(true); int h = Toolkit.getDefaultToolkit().getScreenSize().height; int w = Toolkit.getDefaultToolkit().getScreenSize().width; f.setSize(500, 400); f.setLocation((w-500)/2, (h-400)/2); f.setBackground(new Color(202,232,207)); f.setLayout(null); //创建单行文本框 TextField tf = new TextField(); //设置 tf.setBounds(40, 50, 300, 25); f.add(tf); //事件源文本框,添加键盘事件 tf.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e){ //获取到键盘上ASCII码 int code = e.getKeyCode(); //判断code范围是不是数字 /* if(code < KeyEvent.VK_0 || code > KeyEvent.VK_9){ e.consume(); }*/ //Ctrl+Enter的组合键 //父类方法 isControlDown() 判断回车键 if(e.isControlDown() && code == KeyEvent.VK_ENTER){ System.out.println("组合键"); } } }); }}
======================================================
图形界面上的菜单
MenuBar 菜单栏
Menu 菜单
MenuItem 菜单项
创建菜单栏对象
MenuBar 构造方法,空参数
菜单添加到窗体上, 使用的是窗体方法setMenuBar
创建菜单对象
Menu 构造方法,传递字符串,显示菜单上
MenuBar方法add添加菜单
创建菜单项
MenuItem 构造方法,传递字符串,显示菜单项上
Menu类的方法add添加菜单
MenuItem 才能添加事件,活动事件
子菜单,一个Menu.add(另一个Menu)
public class MenuDemo { public static void main(String[] args) { Frame f = new Frame("制作菜单"); f.setBounds(200, 100, 500, 300); f.setVisible(true); //创建菜单栏 MenuBar bar = new MenuBar(); //创建方法setMenuBar f.setMenuBar(bar); //创建菜单 Menu newMenu = new Menu("新建"); Menu editMenu = new Menu("编辑"); //菜单栏add添加菜单 bar.add(newMenu); bar.add(editMenu); //创建菜单项 MenuItem java = new MenuItem("java"); MenuItem c = new MenuItem("c语言"); MenuItem copy = new MenuItem("复制"); MenuItem paste = new MenuItem("粘贴"); //菜单项添加到菜单里 菜单方法add newMenu.add(java); newMenu.add(c); editMenu.add(copy); editMenu.add(paste); //添加菜单 HTML Menu Menu html = new Menu("HTML"); //添加菜单项 MenuItem css = new MenuItem("CSS"); MenuItem js = new MenuItem("javascript"); newMenu.add(html); html.add(css); html.add(js); //java菜单,添加活动监听 java.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("#########"); } }); }}
=========================================
文件对话框 FileDialog
FileDialog打开文件对话框,用户可以从中选择文件
文件对话框,不是独立存在
构造器 FileDialog(Frame parent, String title, int mode)
String getDirectory()
获取此文件对话框的目录。
String getFile()
获取此文件对话框的选定文件。
这个知识点比较杂乱,只有多多熟悉猜好办,上几个自己写的列子~~!
public class Demo { public static void main(String[] args) { //创建窗口视图 //随即数 final Random r = new Random(); final Frame f = new Frame("qw"); f.setBounds(200, 100, 500, 400); f.setVisible(true); //设置严肃 //f.setBackground(Color.getHSBColor(202, 112, 211)); f.setLayout(null); Button but = new Button("变色龙,请点我"); but.setBounds(300, 170, 85, 40); f.add(but); but.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { int x = r.nextInt(200); int y = r.nextInt(200); int z = r.nextInt(200); f.setBackground(Color.getHSBColor(x, y, z)); System.out.println(x+"--"+y+"--"+z); System.out.println("-----------------------"); } // public void mouseExited(MouseEvent e) {// int x = r.nextInt(200); // int y = r.nextInt(200); // int z = r.nextInt(200); // f.setBackground(Color.getHSBColor(x, y, z));// System.out.println(x+"--"+y+"--"+z);// } }); //窗口监视 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); }}
/* * * MenuBar, //菜单栏 * Menu,//菜单 * MenuItem//菜单项 */public class Demo { public static void main(String[] args) { //创建一个窗口 final Frame f = new Frame("qixin"); //定义大小 f.setBounds(300, 200, 500, 400); //添加背景颜色 f.setBackground(Color.getHSBColor(112, 223,227)); //显示 f.setVisible(true); //取消区域 f.setLayout(null); //窗口监听 f.addWindowListener(new WindowAdapter() { //重写方法 关闭事件 public void windowClosing(WindowEvent e){ System.exit(0); } }); setMenu(f); txt(f); } public static void setMenu(Frame f ){ MenuBar mb = new MenuBar();//创建菜单栏 f.setMenuBar(mb);//窗口方法添加menubar //创建菜单对象 Menu m = new Menu("喜欢的"); Menu n = new Menu("不喜欢的"); mb.add(m);//菜单栏的方法add添加菜单 mb.add(n); //创建菜单项 Menu mi = new Menu("柯南"); MenuItem m2 = new MenuItem("大柯南"); Menu mi1 = new Menu("新一"); MenuItem m1 = new MenuItem("小新一"); MenuItem mi2 = new MenuItem("小兰"); MenuItem ni = new MenuItem("内向的"); MenuItem ni1 = new MenuItem("不自信的"); MenuItem ni2 = new MenuItem("躺着也中枪了~"); //菜单添加菜单 m.add(mi); m.add(mi1); //菜单项添加到菜单 菜单的方法add() mi.add(m1); mi1.add(m2); m.add(mi2); n.add(ni); n.add(ni1); n.add(ni2); //菜单有监视机制吗? mi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Frame f =new Frame("柯南"); //定义大小 f.setBounds(300, 200, 500, 400); //添加背景颜色 f.setBackground(Color.getHSBColor(112, 223,227)); //显示 f.setVisible(true); //取消区域 f.setLayout(null); //创建文本区域 TextArea ar = new TextArea("吃了药丸变小的工藤新一~~!"); ar.setBounds(45, 105, 380, 280); f.add(ar); ar.setFont(new Font("宋体",Font.BOLD,25)); //窗口监听 f.addWindowListener(new WindowAdapter() { //重写方法 关闭事件 public void windowClosing(WindowEvent e){ System.exit(0);//崩溃 返回不了上一级了 用多线程? } }); } }); } //创建文本框 以及按钮 public static void txt(Frame f ){ //创建文本框 final TextField t = new TextField(); t.setBounds(45, 70, 280, 25); f.add(t); //按钮 Button but = new Button("自信"); Button but1 = new Button("不自信"); but.setBounds(360, 70, 55, 25); but1.setBounds(420, 70, 55, 25); f.add(but); f.add(but1); //创建文本区域 final TextArea ar = new TextArea("看到了千万别生气哦~~!"); ar.setBounds(45, 105, 380, 280); f.add(ar); ar.setFont(new Font("宋体",Font.BOLD,25)); //按钮监听机制 but.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e ){ //判断文本框里面是否为空 if ("".equals(t.getText())) { return; } ar.append(t.getText()+"\r\n");//\r\n可以用System方法获取 t.setText(""); } }); but1.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e ){ ar.setText("qixin 你真的很自信哦~!~"); } }); }}//如果在菜单项这个事件源上加上 监视机制该怎么写那?//应该把相同的直接提取出来
- JAVA--图形界面化
- java 图形界面
- java图形界面
- java图形界面
- Java图形界面
- java 图形界面
- Java 图形界面
- Java图形界面
- java Application创建图形界面
- java的图形界面
- Java图形界面开发
- java图形界面讲解
- JAVA图形界面编程
- java图形界面设计
- Java图形界面编程
- java图形界面应用程序
- java图形界面笔记
- Java图形界面汉诺塔
- [LeetCode][Java] Search a 2D Matrix
- 2-SAT
- ARCGISServer加载切片地图
- Internal interruption learning
- 美团前端面试小结
- JAVA--图形界面化
- (4)unity入门,模型、光照、角色移动、场景加载
- 用lag补满数据
- 关于在Editplus中设置内容提示比如syso的快捷输出的方法
- 《UNIX编程艺术》精彩语录
- Struts2入门:struts2环境配置和一个小例子
- 游戏中汉字显示的实现与技巧
- 刚学ui,自己写了个霓虹灯,我觉的我写的这个比比百度上简单多了!!!
- 怎样编写一个类Spy++的搜索窗口程序