厌倦了在控制台使用键盘输入并显示结果的过程?是的,在你现在这台电脑上,已经很少有程序使用这种交互方式。本实验将带你初步进入图形用户界面(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); } }

												

Swing入门的更多相关文章

  1. swing入门教程

    (转自http://terrificwanjun.bokee.com/) UI 组件简介 在开始学习 Swing 之前,必须回答针对真正初学者的一个问题:什么是 UI?初学者的答案是“用户界面”.但是 ...

  2. swing入门例子

    // a simple exmple that can show the basis of swing------------------------------------------------- ...

  3. Swing入门学习

    工作以来,一直都是基于java web方向的开发,并没有java方向GUI相关的开发经验,不过好在之前用过winform开发.有了基础的套路,想来搞一下Swing也没有什么压力!到网上搜了一下相关的学 ...

  4. 【计理01组04号】JDK基础入门

    java.lang包 java.lang包装类 我们都知道 java 是一门面向对象的语言,类将方法和属性封装起来,这样就可以创建和处理相同方法和属性的对象了.但是 java 中的基本数据类型却不是面 ...

  5. 201521123074 《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...

  6. 侃侃Thinking In Java

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/yqj2065/article/details/37074503 对于大学生,yqj2065不推荐Th ...

  7. ApacheCN Java 译文集 20211012 更新

    Effective Java 中文第三版 1. 考虑使用静态工厂方法替代构造方法 2. 当构造方法参数过多时使用 builder 模式 3. 使用私有构造方法或枚类实现 Singleton 属性 4. ...

  8. ae(ArcEngine) java swing开发入门系列(1):开发环境和代码部署

    前言:做ae开发大部分人都是用C#版,很少用到java版,本系列文章主要介绍java版ae开发的入门,对于ae接口的高级应用,可以看C#版相关文章 开发环境软件: Intellij IDEA 2018 ...

  9. JavaGUI之Swing简单入门示例

    简介 AWT(译:抽象窗口工具包),是Java的平台独立的窗口系统,图形和用户界面器件工具包. Swing 是为了解决 AWT 存在的问题而以 AWT 为基础新开发的包(在使用Swing时也常会用到j ...

随机推荐

  1. Linux驱动技术(四) _异步通知技术

    异步通知的全称是"信号驱动的异步IO",通过"信号"的方式,放期望获取的资源可用时,驱动会主动通知指定的应用程序,和应用层的"信号"相对应, ...

  2. 在Ubuntu12.0至14.04版本之间用Apache搭建网站运行环境

    为了顺利安装各种软件,先更新下系统. apt-get update 安装Apache服务 apt-get install apache2 -y 安装php apt-get install php5 - ...

  3. apche基于域名,ip,端口的配置

    基于域名的服务端: 13 iptables -F 14 setenforce 0 15 ifconfig eth0 172.18.43.146 16 yum -y install bind bind- ...

  4. R语言从小木虫网页批量提取考研调剂信息

    一.从URL读取并返回html树     1.1 Rcurl包         使用Rcurl包可以方便的向服务器发出请求,捕获URI,get 和 post 表单.比R socktet连接要提供更高水 ...

  5. 纪中集训 Day 2

    今天(其实是昨天= =)早上起来发现好冷好冷啊= = 吃完饭就准备比赛了,好吧B组难度的题总有一道不知到怎么写QAQ 太弱了啊!!! 蒟蒻没人权啊QAQ 今天第4题不会写,在这里说说吧 题目的意思就是 ...

  6. XML与JavaScript知识

    什么是XMLHttpRequest 对象? 答:XMLHttpRequest 对象用于在后台与服务器交换数据,它是开发者的梦想,因为它能够:1.在不重新加载页面的情况下更新网页:2.在页面已加载后从服 ...

  7. 设计理念 : popup login 在前后台

    popup 意思是一个遮罩层顶在整个网页最前方,在前台设计是这样的,当用户想在那个界面登入时,就可以有一个遮罩层出现. 在employer或admin(后台)操作界面是同个理念,在所有的界面都是有co ...

  8. Number()、parseInt()、parseFloat()的区别

    最近在一个项目中遇到:需要在前台页面用javascript去处理很数值的计算. 各种用法都有,为了统一且保证处理方式正确,特地总结了一下相关的数值转换的用法: 作用: Number():可以用于任何数 ...

  9. 安全体系(三)——SHA1算法详解

    本文主要讲述使用SHA1算法计算信息摘要的过程. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(一)—— DES算法详解 安全体系(二)——RSA算法详解 为保 ...

  10. 转:js中cookie的使用详细分析

    cookie机制将信息存储于用户硬盘,因此可以作为全局变量,这是它最大的一个优点.它可以用于以下几种场合. (1)保存用户登录状态.例如将用户id存储于一个cookie内,这样当用户下次访问该页面时就 ...