本文提出了自己的学习笔记。欢迎转载,但请注明出处: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. javascript实现倒计时-------Day28

    先来两张图片,看一看今天写什么: 看到图片右上角是什么了么看到图片以下是什么了么 相信这个大家都不会陌生吧.那些生活中等着秒杀,等着抢小米人们,焦躁等待的你曾一秒一秒的盯着它看么,我不知道答案,可我知 ...

  2. 理解和运用javascript中的call及apply

    call是为了改变函数上下文context而存在的,换言之,就是改变函数内部this的指向.因为javascript存在[定义时上下文],[运行时上下文]及[上下文]是可以改变的.例如:var fun ...

  3. Zygote过程【3】——SystemServer诞生

    欢迎转载.转载请注明:http://blog.csdn.net/zhgxhuaa 在ZygoteInit的main()方法中做了几件大事.当中一件便是启动Systemserver进程.代码例如以下: ...

  4. Maven学习笔记(三) :Maven使用入门

    编写POM:      Maven项目的核心是pom.xml.POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描写叙述项目怎样构建,声明项目依赖,等等.   ...

  5. 用AsyncTask实现多线程

    前言 在Android应用开发中,有时我们需要实现任务的同步.Android里的AsyncTask类可以帮我们更好地管理线程同步(异步方式),就像Thread类能做的,不过用法比Thread更简单. ...

  6. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

    原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经 ...

  7. 探索C/C++大数快(自然数)模板

    本文fcbruce个人原创整理.转载请注明出处http://blog.csdn.net/u012965890/article/details/40432511,谢谢. 我们知道在C/C++中int型可 ...

  8. 《Javascript权威指南》13号学习笔记:使用日期和时间

    一.创Date示例 1.Date类的方法和属性是非常不静,故,申请书Date属性和方法之前.必须创建Date类的实例. var date = new Date();  //以当前日期和时间创建实例. ...

  9. jquery:ajax不接收返回值回

    html页面a加元素的假设href=javasrcipt:void(0)会导致ajax没有收到回后台值. : <p class="chatmsg_load_more"> ...

  10. Java单链逆转

    本文介绍两种方法单向链表反转.记录,如下面: 1. package com.leetcode; public class ListReverse { public static void main(S ...