java编程接口(1) ------ Swing基金会
本文提出了自己的学习笔记。欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020
近期想学下java的界面编程,在此记录下。
大多数的Swing应用都被构建在基础的JFrame内部。JFrame在你作用的不论什么操作系统中都能够创建视窗应用。
看例如以下一个最简单的JFrame样例:
JFrame frame = new JFrame("Hello Swing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 100);
frame.setVisible(true);
这样就创建了一个带标题的视窗,当中。setDefaultCloseOperation()告诉JFrame当用记运行关闭操作时应该做些什么。
EXIT_ON_CLOSE常量告诉它要退出程序。
而假设没有这个调用,默认的行为是什么都不做。因此应用将不会关闭。setSize()以像素为单位设置视窗的大小。JFrame默认是不显示的。所以须要设置setVisible(true)。才干显示在屏幕上。
效果例如以下图所看到的:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamVzc29uMjAxMjEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
以下。给该视窗加入一个标签,主要代码例如以下:
JLabel label = new JLabel("A Label");
frame.add(label);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
label.setText("Hi,this is a different");
这里面的TimeUnit.SECONDS.sleep(1)指的是过1秒钟后运行以下的操作,即又一次设置JLabel显示的文字。
效果例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamVzc29uMjAxMjEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
上述是直接在Main()线程运行UI事件更新屏幕,但这并非一种好的想法。Swing有它自己的专用线程来接收UI事件并更新屏幕。假设从其它线程着手对屏幕时进行操作。那么就可能会产生冲突和死锁。
所以其它线程包含main()线程。应该通过Swing事件分发线程提交要运行的任务。
能够通过将任务提交给SwingUtilities.invokeLater()来实现。
假设我们将这样的方式应用于面的样例,那么代码例如以下:
final JLabel label = new JLabel("A Label");
frame.add(label);
TimeUnit.SECONDS.sleep(1);
SwingUtilities.invokeLater(new Runnable() { @Override
public void run() {
label.setText("Hi,this is a different");
}
});
如上述代码。不用直接操作JLabel。取而代之的是,提交一个runnable,因此也就不会产生冲突。
既然,Swing有它自己专用的线程来接收UI事件。那么,我们也不应该直接在Main()线程中操作JFrame,因此。我们将JFrame的操作也统一用Swing专用的线程来实现,则上述样例就变成:
public class test { private static JLabel label;
private static JFrame frame; private static void InitJFrame(){
frame = new JFrame("Hello Swing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 100);
frame.setVisible(true); label = new JLabel("A Label");
frame.add(label);
}
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException { SwingUtilities.invokeLater(new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
InitJFrame();
}
});
TimeUnit.SECONDS.sleep(1);
SwingUtilities.invokeLater(new Runnable() { @Override
public void run() {
label.setText("Hi,this is a different");
}
}); } }
当然了。由于创建JFrame有两种方式,一种是new JFrame()。还有一种就是直接继承JFrame,上面的完整代码用的是第一种方法。第二方法完整代码例如以下:
public class SwingTest extends JFrame{ private static JLabel label;
private static SwingTest st; public SwingTest() {
super("Hello Swing");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 100);
setVisible(true); label = new JLabel("A Label");
add(label); } /**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException { SwingUtilities.invokeLater(new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
st = new SwingTest();
}
});
TimeUnit.SECONDS.sleep(1);
SwingUtilities.invokeLater(new Runnable() { @Override
public void run() {
label.setText("Hi,this is a different");
}
}); } }
这里要注意一点。对sleep()的调用不能在构造器的内部,假设放在内部,JLabel的初始文本就永远都不会出现。这主要是由于构造器在sleep()调用完成和新的标签插入之前不会结束。
版权声明:本文博主原创文章。博客,未经同意不得转载。
java编程接口(1) ------ Swing基金会的更多相关文章
- java编程接口(6) ------ 图标
本文提出了自己的学习笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 能够在JLable或者不论什么从AbstractButton继承的组件使用Ic ...
- java编程接口(5) ------ button和button组
这篇文章是由自己的学习笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 了解了布局管理器和Swing事件模型,那么剩下的就是Swing 的各个组件了 ...
- Java GUI编程中AWT/swing/SWT的优缺点
http://www.cnblogs.com/dugang/archive/2010/10/22/1858478.html AWT AWT是Abstract Window Toolkit(抽象窗口工具 ...
- Java编程的逻辑 (19) - 接口的本质
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- java编程思想第九章接口
9.1抽象类和抽象方法 为什么要有抽象类? 是希望通过通用接口操作一系列类. 那么抽象类的形式是什么样的呢? 声明类的使用使用abstract关键字,且在该类中应该具有抽象方法. 注:抽象方法被关键字 ...
- JAVA面向接口的编程思想与具体实现
面向对象设计里有一点大家已基本形成共识,就是面向接口编程,我想大多数人对这个是没有什么觉得需要怀疑的. 问题是在实际的项目开发中我们是怎么体现的呢? 难道就是每一个实现都提供一个接口就了 ...
- Java 虚拟机编程接口JVMIT
JVMTI(JVM Tool Interface)是 Java 虚拟机所提供的 native 编程接口,是 JVMPI(Java Virtual Machine Profiler Interface) ...
- Java链式编程接口
在android开发中显示一个AlertDialog时,常采用下列的写法: new AlertDialog.Builder(getApplicationContext()) .setTitle(&qu ...
- Java 编程入门(词汇表)
抽象类(abstract class):抽象类不能创建对象,主要用来创建子类.Java中的抽象类使用 abstract 修饰符定义. 抽象数据类型(abstract data type ADT):抽象 ...
随机推荐
- effective c++ prefer const,enum, inline to #defines
学习心得 对于纯常量,最好以const对象或者enums替换#define #define FIRST 3 //not good enum { first=1, second=2 } ; int nu ...
- 组态Log4j(非常具体的)
来自哪里: http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设 ...
- QrcodeWithLogo
package com.qrcode; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import ...
- HDU 4513 哥几个系列故事——形成完善II manacher求最长回文
标题来源:哥几个系列故事--形成完善II 意甲冠军:中国 思维:在manacher断 保证非严格递减即可了 #include <cstdio> #include <cstring&g ...
- C# 使用WinRar命令压缩和解压缩
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- MVC 使用IBatis.net
IBatis.net在asp.net MVC下的使用 IBatis.net 是2001年发起的开源项目,它是一个轻量级的ORM框架,现在IBatisNET已经是属于Apache下的一个子项目了,最新版 ...
- 第七章——DMVs和DMFs(4)——用DMV和DMF监控磁盘IO
原文:第七章--DMVs和DMFs(4)--用DMV和DMF监控磁盘IO 前言: 本文为本系列最后一篇,作为DBA,你必须经常关注磁盘的I/O问题,一旦出现问题,要尽快分析出是什么问题.SQLServ ...
- web前端知识体系小结(转)
1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的 ...
- epoll演示样本
server参考是别人的代码 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include ...
- Different ways of associating known types in wcf
解释一下这个博客Known Types此属性标签,假设翻译的单词,所谓已知类型它.在服务契约中实现多态的行为.有四种方式实现,以下来分别演示一下. 1.User KnownType attribute ...