(翻译)Swing 入门例程(一) 一个简单的 Hello World Swing 程序

本文介绍了Swing程序的基础结构,通过一个简单的Hello World示例展示了如何创建Swing应用程序的基本框架,包括设置容器、显示界面及确保线程安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 注:原文请参见 sun 官方网站 http://java.sun.com/docs/books/tutorial/uiswing/learn/example1.html。完全业余爱好,水平有限,翻译中有不妥之处请提宝贵意见。欢迎转载,转载请注明作者 左洸 和出处 博客园

例一:第一个 Swing 程序

如果你现在还没有一个 Java 开发运行环境,并且也不知道如何做,请参考《Java环境基本配置》一文。

现在,我们就可以通过一个小的例程对 Swing 程序有一个大体的、直观地了解了,本文仅仅实现了一个最基本的窗体,在后面的文章中,我们会在这个程序的基础上,逐步扩展难度,并介绍更多 Swing 程序的特征。例程代码在这里: HelloWorldSwing.java

下图是程序运行起来后的样子:

The HelloWorldSwing application.


下面是 HelloWorldSwing 的完整代码:

import  javax.swing. * ;        

public   class  HelloWorldSwing  {
    
/**
     * 创建用户界面并显示他
     * 为了保证线程安全,这个方法应该在事件分派线程中调用。
     
*/

    
private static void createAndShowGUI() {
        
// 确保窗体有一个好的外观装饰
        JFrame.setDefaultLookAndFeelDecorated(true);

        
//创建并设置窗体
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        
//加入一个现实很俗套的 Hello World 的 标签(JLable).
        JLabel label = new JLabel("Hello World");
        frame.getContentPane().add(label);

        
//显示窗体
        frame.pack();
        frame.setVisible(
true);
    }


    
public static void main(String[] args) {
        
 // 为事件分派线程安排一个工作:
        
// 那就是创建和显示这个程序的的用户界面
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            
public void run() {
                createAndShowGUI();
            }

        }
);
    }

}



这是我们能创建的最简单的 Swing 程序,他不能完成什么任务,但是他向我们展示了一个 Swing 程序的基本结构:

1.导入需要用到的包 (packages)
2.设置一个顶层容器 (container)
3.显示这个容器
4.确保线程安全


第一行导入了主要的 Swing 包:

import  javax.swing. * ;
import  java.awt. * ;
import  java.awt.event. * ;
JFrame.setDefaultLookAndFeelDecorated( true );
JFrame frame 
=   new  JFrame( " HelloWorldSwing " );
...
frame.pack();
frame.setVisible(
true );

 
提示:
JLabel label  =   new  JLabel( " Hello World " );
frame.getContentPane().add(label);

 


如果希望程序能在点击窗体的关闭按钮 后正常退出,必须加入下面的代码:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


版本提示
: 在早期的程序中,没有用到 setDefaultCloseOperation 方法,你可能会看到象下面这样的代码:
frame.addWindowListener( new  WindowAdapter()  {
    
public void windowClosing(WindowEvent e) {
        System.exit(
0);
    }

}
);
他仍然可以工作,但是这样做添加一个没有必要的类,使你的程序看起来臃肿。你可以发现更多关于窗体事件的信息在

How to Make Frames (Main Windows)
在 HelloWorldSwing 中以及我们今后所有例子中都会看到像下面这样的代码:
javax.swing.SwingUtilities.invokeLater( new  Runnable()  {
    
public void run() {
        
/* create and show the GUI */ 
    }

}
);


你可以直接照原样复制到你的程序中,这段代码看起来也许有点怪异,但是它可以确保你的图形用户界面程序线程安全。更多的信息清参考 Concurrency in Swing 下面这一行代码对 frame 的边框和窗口标题进行了装饰,但是它需要运行在 1.4 或者更高的 JDK 版本中,如果你使用早期的版本,你需要注释掉这一行。
JFrame.setDefaultLookAndFeelDecorated( true );


除了像 JFrame 这样的顶层容器之外,所有其他的 Swing 组件都继承自 JComponent 类, HelloWorldSwing 中用了 JLabel 就是 JComponent 的子类,他用来显示 Hello World 这两个单词。下面两行代码创建了一个 JLabel 并将它添加 frame 中:需要说明的是 label 被加到 frame 的 content pane 中,而不是直接加到 frame 中。每一个顶层容器都有一个 content pane 用来直接或者间接的容纳其他可视组件(菜单和窗体装饰除外)。

版本提示: 我们预期在1.5版本中可以直接调用顶层容器的 add 方法,而不用再通过 content pane


这些包需要被导入,是因为大部分 Swing 组件 (component) 是以 AWT 为底层构建的,其中包括 AWT 事件模型 (event mode),这个事件模型决定了组件如何响应事件,比如点击按钮或者移动鼠标。在后面的章节中,你可以了解到更多关于事件的介绍 Handling Events.


每一个 Swing 图形用户界面程序至少都有一个顶层 Swing 容器 (container),容器为组件提供图形绘制和事件处理支持。有三个常用的顶层 Swing 容器: JFrame, JDialog, and (for applets) JApplet. 每一个 JFrame 都实现了一个主窗体,每一个 JDialog 都实现了一个二级窗体(从属于另一个窗体),每一个 JApplet 都实现了一个在浏览器中运行的小程序 (applet) 。(更多 JApplet内容 How to Make Applets


HelloWorldSwing 只用到了一个顶层 Swing 容器 JFrame ,作为 JFrame 创建的一个实例,一个框架 (frame) 就是我们平常所说的一个窗口,在默认情况下,它包括窗体区域、边框、标题、最大化、最小化和关闭按钮。一个有图形用户界面 (GUI) 的程序至少要有一个 frame .


下面的代码创建并了一个 frame , 并进行了设置:

HelloWorldSwing 只需要着一个包,但是在大部分 Swing 程序中,可能还需要导入另外两个 AWT 包:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值