本文提出了自己的学习笔记。欢迎转载,但请注明出处: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基金会的更多相关文章

  1. java编程接口(6) ------ 图标

    本文提出了自己的学习笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 能够在JLable或者不论什么从AbstractButton继承的组件使用Ic ...

  2. java编程接口(5) ------ button和button组

    这篇文章是由自己的学习笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 了解了布局管理器和Swing事件模型,那么剩下的就是Swing 的各个组件了 ...

  3. Java GUI编程中AWT/swing/SWT的优缺点

    http://www.cnblogs.com/dugang/archive/2010/10/22/1858478.html AWT AWT是Abstract Window Toolkit(抽象窗口工具 ...

  4. Java编程的逻辑 (19) - 接口的本质

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  5. java编程思想第九章接口

    9.1抽象类和抽象方法 为什么要有抽象类? 是希望通过通用接口操作一系列类. 那么抽象类的形式是什么样的呢? 声明类的使用使用abstract关键字,且在该类中应该具有抽象方法. 注:抽象方法被关键字 ...

  6. JAVA面向接口的编程思想与具体实现

    面向对象设计里有一点大家已基本形成共识,就是面向接口编程,我想大多数人对这个是没有什么觉得需要怀疑的.        问题是在实际的项目开发中我们是怎么体现的呢? 难道就是每一个实现都提供一个接口就了 ...

  7. Java 虚拟机编程接口JVMIT

    JVMTI(JVM Tool Interface)是 Java 虚拟机所提供的 native 编程接口,是 JVMPI(Java Virtual Machine Profiler Interface) ...

  8. Java链式编程接口

    在android开发中显示一个AlertDialog时,常采用下列的写法: new AlertDialog.Builder(getApplicationContext()) .setTitle(&qu ...

  9. Java 编程入门(词汇表)

    抽象类(abstract class):抽象类不能创建对象,主要用来创建子类.Java中的抽象类使用 abstract 修饰符定义. 抽象数据类型(abstract data type ADT):抽象 ...

随机推荐

  1. Autofac 入门

    Autofac 入门文档 原文链接:http://docs.autofac.org/en/latest/getting-started/index.html 在程序中使用Autofac的基本模式是: ...

  2. Codeforces 474 E. Pillars

    水太...... E. Pillars time limit per test 1 second memory limit per test 256 megabytes input standard ...

  3. 【转】c++继承:公有、私有、保护

    原文链接:http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html 公有继承(public).私有继承(private).保护继承(pro ...

  4. 玩转Web之easyui(一)-----easy ui datagird 分页

    easy ui 中数据表格的分页其实是很简单的,分页是在数据表格可以正常显示数据的基础上进行的,在这里给出servlet的代码,其中selectAll()方法是从数据库中提取所有数据, 分页的一种思路 ...

  5. vpdn详细说明

     VPDN英文为Virtual Private Dial-up Networks,又称为虚拟专用拨号网,是VPN业务的一种,是基于拨号用户的虚拟专用拨号网业务. 中文名 虚拟专用拨号网业务 外文名 ...

  6. 【C语言探索之旅】 第一部分第四课第二章:变量的世界之变量声明

    内容简介 1.课程大纲 2.第一部分第四课第二章:变量的世界之变量声明 3.第一部分第四课第三章预告:变量的世界之显示变量内容 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布 ...

  7. hadoop出现namenode running as process 18472. Stop it first.

    hadoop出现namenode running as process 18472. Stop it first.等等,类别似几个的出现. namenode running as process 32 ...

  8. HDU ACM 1088 Write a simple HTML Browser

    意甲冠军:出现<br>总结,出现<hr>出口'-',今天的字加上各行的假设是长于80然后包,每个字之前,留下一个空白格,为了输出新行结束. #include<iostre ...

  9. C/C++综合測试题(三)

    又刷了一套题 这些题都是百度.阿里巴巴.腾讯.网易.新浪等公司的面试原题,有一定的难度.只是确实相当有水平,能够通过做题来查漏补缺. 1.补充以下函数代码: 假设两段内存重叠,用memcpy函数可能会 ...

  10. 最艰难的采访IT公司ThoughtWorks代码挑战——FizzBuzzWhizz游戏

    最近的互联网招聘平台拉勾网在五月推出了"最艰难的采访IT公司"码挑战活动,评选出了5个最难面试的IT公司,即:ThoughtWorks.Google.Unisys.Rackspac ...