Swing入门

厌倦了在控制台使用键盘输入并显示结果的过程?是的,在你现在这台电脑上,已经很少有程序使用这种交互方式。本实验将带你初步进入图形用户界面(GUI)的世界,让你学会如何编写屏幕上那些具有特定大小和位置的窗体程序,并在其中添加文本,处理用户的输入。通过学习,可以让你的程序真正地“有头有脸”——具有更好的人机交互性能。

1. GUI和MVC

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。 ——来自 百度百科 · GUI

Swing便是Java中的一个GUI,它是基于MVC(模型-视图-控制器)设计模式来进行设计的,通过事件对用户的输入进行反应。即使是最简单的一个按钮,也是包含了它的外观(什么颜色,有多大)、内容(按钮上面显示什么文字等)以及行为(对于用户按下时的反应)这三个要素。

比如,你在进行实验的时候,摆在你面前、在你的电脑屏幕上显示的内容,就是视图;你在实验环境中每一次的鼠标点击、输入的内容,都有专门的模块来负责处理你的这些输入,可以理解为控制器;而你写的代码、实验时的环境,这些内容,都称之为模型。

下图表示了MVC组件类型的关系和功能。 

2. 初始Swing

Swing 是在抽象窗口工具箱(AWT)的架构上发展而来的一个用户界面库,整个可视组件库的基础构造块是 JComponent。它是所有组件的父类,为所有组件提供了绘制的基础架构。换言之,所有的Swing组件都是由它派生而来。

基于Swing制作的Java程序就是由一个一个的组件构成的,开发的过程有点像组装乐高积木。下面我们就通过实验来熟悉一些基本的组件。

public class MySwingWindow {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}

2.1 盛放控件的盘子——JFrame

JFrame 类就是一个容器,允许你把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。JFrame 在大多数操作系统中是以窗口的形式注册的,这意味着你可以对其进行最小化和最大化,甚至移动这个窗口。

如果要打个比方的话,你的脸就是一个容器,眼睛、耳朵、鼻子和嘴巴这些“控件”需要放在脸上,别人看到你这个“界面”实际上就是你的脸,以及上面的“控件”。

不同的教材对于JFrame的称呼是有差别的。这里我们称之为“窗体”。

下面是它包含的一些方法的用法和说明:

方法 说明
get/setTitle() 获取/设置窗体的标题
get/setState() 获取/设置窗体的最小化、最大化等状态
is/setVisible() 获取/设置窗体的可视状态,换言之,是否在屏幕上显示
get/setLocation() 获取/设置窗体在屏幕上在什么位置出现
get/setSize() 获取/设置窗体的大小
add() 将组件添加到窗体中,这个过程把各个控件形成了一个整体

对于 Swing 应用程序,我们如果要将组件放在 JFrame 上,则需要继承JFrame 类。我们来尝试创建一个窗体吧。

主要的代码如下:

import javax.swing.JFrame;

public class MySwingWindow extends JFrame {

    //在窗体的构造方法中设置窗体的各项属性
    public MySwingWindow(){
        //使用super()类引用父类的成分,用this来引用当前对象。
        super();

        //设置窗体大小
        this.setSize(400, 300);

        // //返回此窗体的 contentPane 对象,设置其布局
        this.getContentPane().setLayout(null);

        this.setTitle("My First Swing Window");
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        MySwingWindow window = new MySwingWindow();

        window.setVisible(true);

    }

}

2.2 个性化Swing应用程序

有了最基础的容器,我们就可以在上面添加各式各样的控件。Swing中的控件数量是巨大的,但它们的使用方法都是相通的,你可以在API文档中查阅每种控件的属性及其设置方法、获取属性和数据的方法等等。

我们在本实验中先为大家介绍一些常用的控件,在上一步的基础上继续个性化我们的MySwingWindow。

首先添加 Swing 库中最基础的组件——标签JLabel。JLabel 可以用作文本描述和图片描述,常用的方法如下:

方法 说明
get/setText() 获取/设置标签的文本
get/setIcon() 获取/设置标签的图片

你需要先声明这个控件对象。

private JLabel myLabel;

然后编写一个getJLabel()方法,用于返回一个JLabel实例.

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class MySwingWindow extends JFrame {

    /*标签*/
    private JLabel myLabel;

    private JLabel getJLabel(){
        if(myLabel == null){

            //实例化mylabel对象
            myLabel = new JLabel();

            //使用setBounds()方法设置尺寸
            //四个参数的分别是x,y,width,height
            //代表了横向、纵向的位置,以及标签自身的宽和高
            myLabel.setBounds(5, 10, 250, 30);

            myLabel.setText("Hello!hold on!");
        }
        //返回创建的实例
        return myLabel;
    }

    /*文本框*/
    private JTextField myTextField;

    private JTextField getJTextField() {
        //此处的返回值类型为JTextField

        if(myTextField == null) {
        //加上这个判断是为了防止出错

            myTextField = new JTextField();
            //实例化myTextField对象

            myTextField.setBounds(5, 45, 200, 30);
            //设置它的位置和尺寸

            myTextField.setText("i love you");
            //设定它要显示的字符串

        }

        return myTextField;
        //返回这个实例
    }

    /*按钮*/
    private JButton myButton;

    private JButton getJButton() {
        //此处的返回值类型为JButton 

        if(myButton == null) {

            myButton = new JButton();
            //实例化myTextField对象
            myButton.setBounds(5, 80, 100, 40);
            //设置它的位置和尺寸
            myButton.setText("Click me!");
            //设定它要显示的字符串
            myButton.addActionListener(new ActionListener() {
                //为其添加一个事件监听,从而使这个按钮可以响应用户的点击操作
                //ActionListener是用于接收操作事件的侦听器接口。
                //对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对
                //可使用组件的 addActionListener 方法向该组件注册。
                //在发生操作事件时,调用该对象的 actionPerformed 方法。

                public void actionPerformed(ActionEvent e) {
                    //该方法会在发生操作时被调用,我们要做的事情就可以写在这里面
                    //比如我们下面要做的事情就是改变之前两个控件里面的文字颜色和背景色

                    myLabel.setForeground(Color.RED);
                    //设置此组件的前景色。

                    myTextField.setBackground(Color.BLUE);
                    //设置此组件的背景色。
                }
            });
           // 代码myButton.addActionListener(new ActionListener(){ ... });中的new ActionListener(){ ... }是一种名为匿名类的用法。
        }
        return myButton;
    }

    /*在窗体的构造方法中设置窗体的各项属性*/
    public MySwingWindow(){
        //使用super()类引用父类的成分,用this来引用当前对象。
        super();

        //设置窗体大小
        this.setSize(400, 300);

        // //返回此窗体的 contentPane 对象,设置其布局
        this.getContentPane().setLayout(null);

        this.setTitle("My First Swing Window");

        this.add(getJLabel(),null);
        this.add(getJTextField(), null);
        this.add(getJButton(),null);
        //在自定义的JFrame构造方法中使用add()方法来添加控件
        //add()方法可以将指定组件添加到此容器的给定位置上
        //第一个参数为待添加的组件,这里的组件来自我们的返回值
        //第二个参数为描述组件的布局限制的对象,我们不加限制,所以填null

    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        MySwingWindow window = new MySwingWindow();

        window.setVisible(true);

    }

}

				
时间: 2024-10-07 06:39:06

Swing入门的相关文章

swing入门教程

     UI 组件简介 在开始学习 Swing 之前,必须回答针对真正初学者的一个问题:什么是 UI?初学者的答案是"用户界面".但是因为本教程的目标是要保证您不再只是个初学者,所以我们需要比这个定义更高级的定义. 所以,我再次提出这个问题:什么是 UI?您可能把它定义成您按下的按钮.打字的地址栏 .打开和关闭的窗口,等等,这些都是 UI 的元素,但是除了在屏幕上看到的这些之外,还有更多都是 UI 元素.比如鼠标.键盘.音量.屏幕颜色.使用的字体,以及一个对象相对于另一个对象的位

swing 入门备注

1:swing的页面布局算是毕竟重要的,控件怎么排放的问题,看到过一个例子,说JFrame相当于桌子,JPanel相当于桌布,JTextField||JButton||JLabel--相当于锅碗,    所以,在画页面的时候,各个不同的组件应该放在JPanel上面,JPanel放在JFrame上面: 2:Jframe 的一些方法: setLocationRelativeTo() 方法,可以在swing操作窗口的时候,将页面放置到窗口正中央: setVisible(true);//显示 setRe

Swing入门——简单了解+demo(一)

工作以来,一直都是基于java web方向的开发,并没有java方向GUI相关的开发经验,不过好在之前用过winform开发.有了基础的套路,想来搞一下Swing也没有什么压力!到网上搜了一下相关的学习资料,有拖拖拽拽的控件,也有代码实现的.为了加深印象和理解,直接搞代码吧~ 参考了网上的相关博客,先有一个大体的了解,比如:http://www.blogjava.net/jerry-zhaoj/articles/283170.html 选择了一个PDF作为学习的参考:Java Swing图形界面

侃侃Thinking In Java

我是从Bruce Eckel的网站开始,读Thinking In Java 1st edition的,那是2000年左右.实话实说,对于TIJ,我又喜欢又讨厌它. 又喜欢又讨厌 正如大多数同学所感觉的,TIJ偏重于介绍面向对象的"思想",而不是像绝大多数(国内的)<Xxx程序设计>之类的书籍,前者是思想流派,后者是语法流.这点很吸引我,而且,这也是我写<编程导论(Java)>时学习的地方. 但,我并没有完整地读完TIJ,因为 我不喜欢他的讲述方式.Bruce E

【GUI开发】Swing的一本极好的入门教材

1 // Java大学简明教程 Deitel 著 简单易懂,详细讲Swing图形界面开发 2 3 package first; 4 5 import java.awt.*; 6 import javax.swing.*; 7 8 9 public class WelcomeSwing extends JFrame 10 { 11 private JLabel textJLabel; 12 //private JLabel pictureJLabel; 13 14 public WelcomeSw

JAVA入门到精通-第32讲-swing编程实战

 JBorderLayout,左边是JList,拆分窗格: 图片是放在JLabel上的,图片的地址写好就行:  在相关项目下面建立一个文件夹Folder,放置图片:或者复制粘贴:   拆分:水平拆分?垂直拆分?    拆分之后把jList和jl1这两个组件放进去: 可以伸缩:  在窗口左上角出现自己的图标? Border布局: 多行文本框带滚动条,聊天窗口可滚动:   加入QQ左上角图标:      转成图片,getImage; Border布局很有用, CENTER会被自动挤满:  QQ号码.

JavaGUI之Swing简单入门示例

简介 AWT(译:抽象窗口工具包),是Java的平台独立的窗口系统,图形和用户界面器件工具包. Swing 是为了解决 AWT 存在的问题而以 AWT 为基础新开发的包(在使用Swing时也常会用到java.awt.*包). JFrame JFrame容器允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户.我们可以直接new一个JFrame对象,也可以自己实现一个类继承它(常用). 常用方法 设置窗口可见:setVisible(true);//默认为false 设置窗口标题:s

Gulp新手入门教程

Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务: 搭建web服务器 文件保存时自动重载浏览器 使用预处理器如Sass.LESS 优化资源,比如压缩CSS.JavaScript.压缩图片 当然Gulp能做的远不止这些.如果你够疯狂,你甚至可以使用它搭建一个静态页面生成器.Gulp真的足够强大,但你必须学会驾驭它. 这是这篇文章的主要目的.帮助你了解Gulp的基础用法,助你早日完成一统天下的大业. 在我们深入了解之前,我们先来说说为什么是Gulp. 为什么是Gulp? 类似Gulp的

14.4-全栈Java笔记: javax.swing常用控件有哪些?怎么用?

常用基本控件 javax.swing.JButton 在图形界面程序中,按钮可能是使用量最大的控件之一,javax.swing包中JButton类就是用来创建按钮的.如表1所示,为JButton常用的构造方法.  javax.swing.JLabel JLabel控件是最简单的Swing组件之一,用于在窗体上显示标签, JLabel既可以显示文本,也可以显示图像.如表3所示,为JLabel常用的构造方法. 注意: JLabel只能用于显示文本和图标信息,用户不能对其进行修改. javax.swi