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基础的更多相关文章

  1. Swing基础知识

    1 http://zxc8899.iteye.com/blog/1556094  最基本的组件 2 http://zhangjunhd.blog.51cto.com/113473/128174 布局管 ...

  2. Swing:LookAndFeel 教程第一篇——手把手教你写出自己的 LookAndFeel

    本文是 LookAndFeel 系列教程的第一篇. 是我在对 Swing 学习摸索中的一些微薄经验. 我相信,细致看全然系列之后.你就能写出自己的 LookAndFeel. 你会发现 Swing 原来 ...

  3. java使用方法总结

    第一章 字符串 . 获取字符串的长度: length() . 判断字符串的前缀或后缀与已知字符串是否相同 前缀 startsWith(String s) .后缀 endsWith(String s) ...

  4. 【转】O'Reilly Java系列书籍建议阅读顺序(转自蔡学庸)

    Learning Java the O'Reilly's Way (Part I) Java 技术可以说是越来越重要了,不但可以用在计算机上,甚至连电视等家电用品,行动电话.个人数字助理(PDA)等电 ...

  5. java程序设计----学生基本信息管理系统

    1. 团队课程设计博客链接 http://www.cnblogs.com/hyy786030686/p/7063890.html 2. 个人负责模块或任务说明 --登录界面的设计 --用户名和密码验证 ...

  6. Java中的常用方法

    Java中的常用方法 第一章 字符串 1.获取字符串的长度:length() 2.判断字符串的前缀或后缀与已知字符串是否相同    前缀 startsWith(String s).后缀 endsWit ...

  7. 黑马程序员_Java基础:多功能小窗口,swing,io,net综合应用

    ------- android培训.java培训.期待与您交流! ---------- 概念原理的理解,不代表能熟练应用. 如果将多个知识点关联并应用起来,这能加快我们对知识的掌握. 作为一个初学者, ...

  8. 【Swing】图形用户界面基础

    前言 简单总结一下图形用户界面(Graphical User Interface)的相关基础,如GUI的基本元素:窗口,以及介绍Java中的图形界面开发设计的技术. 图形用户界面 图形用户界面就是以图 ...

  9. java基础 swing编程实战

    1. 实现金山词霸,点击左右收缩 效果图: exmaple code : /* * 词霸 * */ package demo7; import java.awt.*; import java.awt. ...

随机推荐

  1. 欧拉路径Hrbust1351

    http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1351 这道题先利用并查集的知识点, ...

  2. C++调用WebService服务问题总结

    近期接手一部分C++研发工作,同时与.NET开发小组进行软件功能协作,于是需要调用.NET WebService服务,已完成数据的网络通讯业务功能:结束之余,将手头碰到的问题总结罗列如下: C++如何 ...

  3. 【PL/SQL练习】控制结构

    1.if判断: if-then-end if: SQL> declare v_ename emp.ename%type; v_sal emp.sal%type; begin select ena ...

  4. asp.net 播放flash

    注意3点: 1.路径,swf播放器对应的是当前页面的路径,flv视频对应的是swf播放器的路径2.路径中不能出现中文3.IIS设置,IIS站点属性中的HTTP头->MIME添加MIME影射关系, ...

  5. Android STL PORT

    ndk中包含了stl对应的库,在$(NKD_HOME)/sources/cxx-stl/stlport/stlport 有关Android NDK的C++ STL开发相关总结如下: 从Android ...

  6. 正宗PC Unix实验环境

    首先解释一下PCUNIX环境,在PC服务器上可以安装多种UNIX系统例如ScoUnix,SunSolarisx86系统,BSD系统等等,但是唯一应用在生产系统(例如邮政储蓄,证券和某些银行前置机等)的 ...

  7. Oracle 11g 客户端 下载地址

    摘自: http://blog.csdn.net/davidhsing/article/details/8271845 Oracle Database Instant Client 11g 11.2. ...

  8. Find out who the “mole” is?

    Blueheat Company’s  production server was out of order again. The CEO was very upset and want their ...

  9. NTP服务搭建

    1:实验环境 前提条件:虚拟机环境,windows 客户端,关闭防火墙:linux 服务器关闭防火墙,关闭selinux. Cent OS :NTP服务器 IP: 192.168.80.134  /2 ...

  10. .net分页控件webdiyer:AspNetPager

    首先下载:AspNetPager.dll   AspNetPager.xml  放到bin目录下 页面添加<%@ Register Assembly="AspNetPager" ...