Swing基础
Swing基础
JFrame
JPanel
绘图:paint
监听事件: ActionListener KeyListener
Listener和Adapter
计时器:Timer TimerTask
schedule
timer.cancel();
什么是Swing
Swing是JDK提供的一整套 GUI(Graphical User Interface)图形用户界面API。通过Swing可以构建平台无关的桌面应用程序。
JFrame
JFrame用于封装窗体,一个JFrame对象用于实现一个窗体,创建窗口,包含边框、标题和用于关闭和图标化窗口的按钮;
实际应用中,通常采用继承JFrame的方式,定义自己的窗体。
JPanel
JPanel对象表示“面板”, 用于将较小的轻量级组件组合在一起; JFrame 有一个用于盛放组件的“内容面板”,通常可以将其设置为JPanel对象。
组件
添加常用组件
在Swing中,按钮、文本框、标签等都有特定的类与之对应,称之为“组件”;想将其添加到容器中,需要通过调用容器(JFrame或JPanel)的add方法。
组件添加到容器时,其位置与容器的布局设置有关
class LoginFrame extends JFrame{
public LoginFrame(){
this.setSize(350, 220);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel=new JPanel();//创建空白面板
panel.setBackground(Color.blue);
this.add(panel);//将面板添加到窗口里面
//创建3个对象 将3个对象添加到面板
JLabel label =new JLabel("姓名");
JTextField name = new JTextField(20);//字符数
JButton login =new JButton("登录");
panel.add(label);
panel.add(name);
panel.add(login);
}
}
Graphics绘图
绘图原理
任何JComponent的扩展组件均可以进行绘制,想实现绘制必须重写paint方法;对于任何情况的窗口重绘事件,处理器都会通告组件,引发执行所有组件的paint方法,但有一点需要注意的是,paint方法一定不能自己调用,当窗口重绘时(如:窗口扩大,缩小,第一次显示时等)系统会自动调用。
paint方法只有一个Graphics参数,封装了各种绘制操作,可以将其简单的理解为“画笔”;该画笔由系统创建,在调用paint方法时传入,作为程序员可调用该“画笔”对象的各种方法实现绘制;
Graphics对象的度量单位是像素,坐标(0,0)为容器的左上角点。
class StagePanel extends JPanel{
public void paint(Graphics g){
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
}
}
事件监听
1. 回调模式
回调模式是指:如果一个方法的参数是接口类型,则在调用该方法时,需要创建并传递一个实现此接口类型的对象;而该方法在运行时会调用到参数对象中所实现的方法(接口中定义的)。
interface Action {
public void doSth();
}
class 类{
public static void main(String[] args) {
repeat(5, new Action() {
public void doSth() {
System.out.println("Hello, World");
}
});
}
public static void repeat(int n, Action action) {
for (int i = 0; i < n; i++) { action.doSth(); }
}
}
如上的代码中,repeat方法需要一个Action接口类型的参数,其逻辑为将此参数的doSth方法重复执行n次。在调用时,通过内部匿名类传递参数,此处的语义可解释为:通过接口回调传递了一个方法给repeat,让repeat将其执行5次
2. 事件监听机制
事件监听可以看成是回调模式在Swing组件响应用户事件中的应用。
3. ActionListener
ActionListener一般用于监听表示要开始某种操作的事件,如:按钮上的单击,文本框中输入回车等。参见下面的代码:
public interface ActionListener extends EventListener {
public void actionPerformed(ActionEvent e);
}
JButton button = new JButton();
button.addActionListener (new ActionListener() {
public void actionPerformed (ActionEvent e) {
JButton button = (JButton) e.getSource();
button.setText("Don't click me!");
}});
其中,actionPerformed方法用于实现处理Action事件的操作其参数ActionEvent用于封装Action事件的信息,它的getSource方法可以获取产生该事件的事件源对象。
4. KeyListener
KeyListener用于监听键盘事件,其中包括键按下、键释放以及键入(必须确保有Unicode字符的产生,例如组合键将不会产生键入事件)的事件。代码如下:
public interface KeyListener extends EventListener {
public void keyTyped(KeyEvent e);
public void keyPressed(KeyEvent e);
public void keyReleased(KeyEvent e);
}
其中,KeyEvent的getKeyCode()方法用于获得所按下(释放)的键值,可以和KeyEvent所封装的形如VK_XX比对以确定所按下的键。
5. 监听Listener和Adapter
有些场合,仅仅需要响应Listener的某些方法,但作为实现Listener接口的对象又不得不实现其所有的方法,尽管某些方法只提供空的实现。JDK对某些Listener提供了相应的所谓Adapter,即实现了该Listener接口,而所有方法都为空实现的抽象类。在实践中,只需继承该抽象类,重写需要的方法即可。
代码如下:
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();// [c]
if (key == KeyEvent.VK_Q) {//Q表示退出
System.exit(0);// 结束Java进程
}
if (pause) {// pause = true
if (key == KeyEvent.VK_C) {//C表示继续
continueAction();
repaint();
}
return;
}
switch (key) {
case KeyEvent.VK_LEFT:
//tetromino.moveLeft();
moveLeftAction();
break;
case KeyEvent.VK_SPACE :
hardDropAction();
break;
case KeyEvent.VK_UP:
rotateRightAction();
break;
case KeyEvent.VK_P://按键盘上的P表示暂停
pauseAction();
break;
}
repaint();// 再画一次!
}
});
定时器
Timer和TimerTask
JDK提供的Timer类和TimerTask抽象类可以以固定的周期运行某段程序。
schedule (TimerTask task, long delay,long period) 几个参数(任务,延迟时间,间隔时间)
Timer 老婆 TimerTask 老婆命令
timer.cancel();
匿名内部类 在使用外部方法中的局部变量的时候 变量必须用final修饰
不知道怎么用修饰词的时候 要用private 尽可能封装
public class Demo02 {
/**
* @param args
*/
public static void main(String[] args) {
final Timer timer =new Timer();
//局部内部类 在方法中有效
class MyTask extends TimerTask{
public void run(){
System.out.println("吃大餐");
}
}
timer.schedule(new MyTask(), 1000, 500);
/*匿名类/局部内部类 访问外部方法中的局部变量
* 这个变量必须是final类型的 否则编译错误
*/
TimerTask overTask = new TimerTask(){
public void run(){
timer.cancel(); //把timer上的绑定的任务取消
}
};
timer.schedule(overTask, 1000*10);
}
}
Swing基础的更多相关文章
- Swing基础知识
1 http://zxc8899.iteye.com/blog/1556094 最基本的组件 2 http://zhangjunhd.blog.51cto.com/113473/128174 布局管 ...
- Swing:LookAndFeel 教程第一篇——手把手教你写出自己的 LookAndFeel
本文是 LookAndFeel 系列教程的第一篇. 是我在对 Swing 学习摸索中的一些微薄经验. 我相信,细致看全然系列之后.你就能写出自己的 LookAndFeel. 你会发现 Swing 原来 ...
- java使用方法总结
第一章 字符串 . 获取字符串的长度: length() . 判断字符串的前缀或后缀与已知字符串是否相同 前缀 startsWith(String s) .后缀 endsWith(String s) ...
- 【转】O'Reilly Java系列书籍建议阅读顺序(转自蔡学庸)
Learning Java the O'Reilly's Way (Part I) Java 技术可以说是越来越重要了,不但可以用在计算机上,甚至连电视等家电用品,行动电话.个人数字助理(PDA)等电 ...
- java程序设计----学生基本信息管理系统
1. 团队课程设计博客链接 http://www.cnblogs.com/hyy786030686/p/7063890.html 2. 个人负责模块或任务说明 --登录界面的设计 --用户名和密码验证 ...
- Java中的常用方法
Java中的常用方法 第一章 字符串 1.获取字符串的长度:length() 2.判断字符串的前缀或后缀与已知字符串是否相同 前缀 startsWith(String s).后缀 endsWit ...
- 黑马程序员_Java基础:多功能小窗口,swing,io,net综合应用
------- android培训.java培训.期待与您交流! ---------- 概念原理的理解,不代表能熟练应用. 如果将多个知识点关联并应用起来,这能加快我们对知识的掌握. 作为一个初学者, ...
- 【Swing】图形用户界面基础
前言 简单总结一下图形用户界面(Graphical User Interface)的相关基础,如GUI的基本元素:窗口,以及介绍Java中的图形界面开发设计的技术. 图形用户界面 图形用户界面就是以图 ...
- java基础 swing编程实战
1. 实现金山词霸,点击左右收缩 效果图: exmaple code : /* * 词霸 * */ package demo7; import java.awt.*; import java.awt. ...
随机推荐
- POJ2376_Cleaning Shifts_C++
题目:http://poj.org/problem?id=2376 英文题强行看不懂,只看的懂输入输出,输入n,m,下接n行每行一个区间两个数左端点 l,有端点 r 给出n个闭区间,求选择最少的区间能 ...
- 解决spawn-fcgi child exited with: 1
spawn-fcgi -d /data/web/ad/ -f /data/web/ad/code.py -a -P /data/openresty_81/nginx/pid/ad.pid 出错的时候请 ...
- yii学习小结
对yii框架搭建的平台运维过程中,会不断地发现很多新的特性和问题,现一一记录下来,便于后续学习~ 1.日志 在/runtime目录中 参考:http://www.cnblogs.com/you ...
- 学习练习 Oracle数据库小题
Course(课程表) Score(成绩表) Teacher(教师表)
- java基础回顾(二)——内部类
一.常规内部类 public class Outer { int count; void say(){ count++; System.out.println("我是外部类"); ...
- js中字符串,数字之间转换的常用方法
var number={ num:, num1:"2你好" }; //将数字转换为字符串 var str=number.num.toString();//十进制 );//二进制 ) ...
- 对于不是特别擅长Photoshop的人来说,熟悉和运用Photoshop工具提供的各类便捷的快捷键,是有帮助的。
应用程序菜单快捷键之文件 应用程序菜单快捷键之编辑 应用程序菜单快捷键之图像图层 应用程序菜单快捷键 应用程序菜单快捷键之视图 Ctrl + H 取消参考线 调板菜单 ...
- NSString常见用法总结
//====================NSStirng 的常见用法==================== -(void)testString { //创建格式化字符串:占位符(由一个%加一个字 ...
- Unity Js与C#脚本通信
将.js文件放到Standard Assets目录下,否则无法编译通过 CS_test.cs : using UnityEngine; using System.Collections; publ ...
- Unable to add App ID because the '10' App ID limit in '7' days has been exceeded.
Unable to add App ID because the '10' App ID limit in '7' days has been exceeded. 官方的原因是对bundle iden ...