public class GatherPanel extends JFrame {
{
public GatherPanel()
{
initComponents();
}
private void initComponents()
{
//。。。。。。。。。
btnCS = new JButton();
btnCS.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
btnCSActionPerformed(evt);
}
});
//。。。。。。。。
}
private void btnCSActionPerformed(ActionEvent evt)
{//也在事件队列线程里
new CsFrame().setVisible(true);
btnCS.setText("xfsdfsdf");
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new GatherPanel().setVisible(true);
}
});
}
private JButton btnCS;
}
1)匿名内部类(来自thingking in Java)
①内部类继承自某个类或实现某个接口,内部类的代码操作创建它的外围类的对象。所以可以任务内部类提供某种进入其外围类的窗口。(内部类都能独立继承自一个接口的实现,所以无论外围类是否已经继承了某个接口,对应内部类都没有影响)
②对于多重继承,java的接口解决了部分问题,而内部类则有效地实现了“多重继承”
③应用:闭包、回调、控制框架(解决响应事件的需求,主要用来响应事件的系统——事件驱动系统,JavaSE的Swing就是一个事件驱动系统)。JavaSE UI编程的主框架可以用匿名内部类实现,用到闭包、回调(事件注册)、中介者模式、观察者模式。
2)当事件发生的时候,事件被添加postEvent到系统的事件队列EventQueue中。该事件AWTEvent中包含了产生事件的源对象和相关元数据[如事件类型标识符]。事件队列按照顺序依次对其中包含的事件进行处理。在处理时,调用事件的dispatch方法或事件源组件对象的dispatchEvent方法。当dispatchEvent方法会调用当前Component类的对象上已经注册的事件监听器中的方法,从而完成对事件的处理。不过监听器方法被调用顺序不确定。
2)线程AWT-EventQueue-0
Swing是单线程的,所有与组件绘制有关的操作都必须在单一线程中完成。这个线程——事件队列线程。EventQueue类static的invokeLater\invokeAndWait就将Swing组件相关操作的线程加入事件队列中。这样可以把界面绘制与业务处理线程分开,避免执行业务处理是导致界面出现卡死或假死现象。
EventQueue.invokeLater(new Runnable() {
public void run()
{
//Swing组件相关操作
System.out.println(Thread.currentThread().getName());
}
});
怎么调用上面语句结果都是AWT-EventQueue-0,没有新的线程出现。
invokeLater:调用指定Runnabel接口实现对象中的run方法,执行该方法中的业务逻辑,这些业务逻辑将被异步执行。
InvokeAndWait:将等待Runnabel对象的run()方法确定被执行后才返回。
=>此外还有SwingWorker类很好完成后台计算和页面操作分开,Android里面也有。
=>Java7中新增第二事件队列SecondaryLoop是通过EventQueue的createSecondaryLoop方法创建,enter进入处理循环,exit退出。可以用来原来的事件队列阻塞的时候可以用到。
3)MVC1
MVC模式,使用MVC1,视图->控制器->模型->视图。而网页使用MVC2,如struts2。具体另请看:http://hi.baidu.com/jspzelgtegdgxze/item/f072cd4d8cade60f6dc2f015
4)来自《深入理解Java7》成富。
Java在桌面上的应用没有流行起来的原因:
①应用需要JRE支持
②存在一个JRE中间层,应用的性能要比原生代码编写的应用差一些
当时在开发Eclipse案例上比较成功(SWT)
图形用户界面库通常包含3个要素:组件、布局、事件
Java平台可选的图形界面库
①AWT:Abstract Window Toolkit:它在底层操作系统提供的原生图形用户界面的基础上,提供了一个新的抽象
②Swing:相对于重量级的AWT,Swing是轻量级的,而且提供了一些常用的复杂组件。Swing仍然是基于AWT。一个Swing用户界面是在一个空白的AWT组件上绘制的。
③SWT:Standard Widget ToolKit。是Eclipse使用的底层图形用户界面框架。和AWT类似,也采用创建底层操作系统中的原生控件的做法。也提供了和Swing可匹敌的组件库。
④JavaFX:因为现代的桌面应用对交互性提出了更高的要求,这些应用一般大量使用图片、音频和视频等多媒体内容。运行JavaFX开发的程序,还要安装JavaFX运行时。JavaFX未来将成为Java平台上主流的图形用户界面开发库。
分享到:
相关推荐
javase 可视化编程插件,安装完插件之后,可以进行拖拉拽编程。
JavaSE多线程编程专题
资源名称:JavaSE-网络编程视频教程(持续更新中)资源目录:【】01-网络编程(网络模型概述)【】02-网络编程(网络要素-IP地址)【】03-网络编程(网络要素-端口)【】04-网络编程(网络要素-传输协议)【】05-网络编程(IP...
JavaSE核心编程.pdf
JavaSe6 编程指南
网络编程,TPC程序,ECHO程序,UDP程序
图形界面程序的分页程序封装,拿到任何程序都能用,只要你需要分页!!!!!
掌握Java语言基础知识 理解面向对象的编程思想 运用Java编写命令行程序 运用JDBC编写数据库访问程序 运用Swing组件编写图形用户界面程序 运用Swing组件和JDBC实现C/S结构的应用程序
该视频为Javase的学习项目,有详细的源码资料,能够快速掌握Java中基础知识,快速了解如何去开发一个小游戏,希望对你有用
-JavaSE核心编程.pdf
JavaSE_8_GUI编程JavaSE_8_GUI编程JavaSE_8_GUI编程JavaSE_8_GUI编程
socket编程,基于udp面向对象,实现服务端和用户端之间连接互动
Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序,既...
Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序,既...
JavaSe6 编程指南(吴亚峰版)代码大全 下载代码示例进行学习非常简单
Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序,既...
Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。 使用Java编写的应用程序,既...
看B站视频项目总结的系列文档,仅供个人学习使用
看B站视频项目总结的系列文档,仅供个人学习使用