Java学习笔记之Swing(一)

Java学习笔记之Swing(一)


学习目标

  • 了解Swing的基本开发过程。
  • 掌握如何创建窗口、面板、标签和按钮。
  • 掌握和熟练使用Swing中的事件。

Swing的第一个程序

import javax.swing.*;
public class Swing1 extends JFrame{
 public Swing1 {
    this.setLayout(null);//设置布局管理器
    JLabel jl=new JLabel();//定义一个标签
    jl.setText("第一个Swing程序"); //设置显示的文字 
    jl.setBounds(50,50,400,50); //设 置标签的大小和位置 
    this.add(jl); //将标签放到窗口中    
    this.setBounds(300,250,500,200); //设置窗口的大小和位置 
    this.setVisible(true); //设置窗口是可见的
 }
 public static void main(String args[]){
    Swing1 s=new Swing1();
 }
}

JFrame窗口类简介

在开发Swing程序中,通常是通过继承JFrame类来实现窗口的。在该类中具有包括定义窗口标题、标框,以及窗口的 大小和位置等众多方法。在介绍这些方法之前,先来介绍一下JFrame窗口类的构造器。JFrame窗口类具有四种构造器。

最常用的JFrame窗口类的构造器是无参构造器,使用该构造器将创建一 个初始不可见的新窗体。除此之外还有具有一个String类参数的构造器,使用该构造器能够在初始时就创建一个具有标题的新窗体。还有两种 需要给出图形配置参数的构造器,这两种构造器此处不进行介绍。

创建新窗口后,就可以通过JFrame窗口类的方法来设置新窗口。首先使 用无参构造器创建的是一个不可见的新窗体,所以要使用方法来将窗体 设置为可见的形式。在JFrame窗口类中定义了一个setVisible方法来设 置窗口的可见性,该方法具有一个布尔型参数,true表示可见,false表 示不可见。将初始状态下的窗口设置为不可见是有原因的,因为有很多 对窗口的操作需要在窗口不可见的状态下执行,从而setVisible方法通 过在程序的最后执行。

在JFrame窗口类中有个setTitle方法,该方法需要一个字符型参 数。使用setTitle方法可以设置窗口的名称;还有一个setBounds方法,该方法具有4个参数,前两个参数分别表示窗口位置的横坐标和纵坐标,后两个参数分别表示窗口大小的宽度和高度。 JFrame窗口类最重要的方法就是add方法,使用该方法可以将组 件添加到窗口中。除此之外,该类中常用的方法还有setResizable,使用该方法可是设置窗口是否允许调整大小。

JFrame类中还有一个重要的方法,即setDefaultCloseOperation.使用该方法可是设置单击关闭窗口时执行的动作。这里的动作包括四种情况:

  • DO_NOTHING_ON_CLOSE:不执行任何动作;
  • DIPOSE_ON_CLOSE:释放窗体对象;
  • HIDE_ON_CLOSE: 隐藏窗体;
  • EXIT_ON_CLOSE: 退出JVM。

注意:如果不对该值进行设置,默认的值为HIDE_ON_CLOSE,也就是默认情况下单击关闭按钮会隐藏窗口。

JPanel类

JPnael类与上面的JFrame类一样,都属于一个容器类。在正式介绍该类之前我们需要先介绍一下什么是容器。

Swing中的控件可以分为三类,顶层容器、非顶层容器和普通控件。JFrame就属于一个顶层容器。顶层容器是一种可以直接显示在系统桌面的控件,其他控件必须直接或间接的借助顶层容器来显示。顶层容器除了包括JFrame类外,还包括JWindow类和JDialog类。

JPnael类属于一个非顶层容器类。非顶层容器具有两面性,非顶层容器需要放到顶层容器中使用,对于顶层容器来说,非顶层容器只是属于一般的控件。当我们在非顶层容器中添加控件时,对这些控件而言,非顶层容器就属于一个容器。

JPnael面板类简介

JPanel类是一个非顶层容器类,它具有四种构造器,最常用的依然是无参构造器,使用有参构造器可以设置面板使用什么样的布局管理器和是否使用双缓冲。JPanel面板类具有一个添加控件的add方法,使用该方法可以将普通控件添加到面板中。getHeightgetWidth方法可以返回当前面板的高度和宽度。JPanel类中还有一个重要的setToolTipText方法,该方法具有一个字符串参数,该方法的作用是当鼠标指针停在面板上时显示文本内容,字符串指定的就是所要显示的文本。

JLabel标签类

标签是Swing中最基本的控件,它是一种非交互式的控件。JLabel有六个构造器:

标签构造器 说明
public void JLabel() 创建没有图像和标题的标签
public void JLabel(Icon image) 创建具有图像的标签
public void JLabel(Icon image,int horizontalAlignment) 创建具有图像和指定对齐方式的标签
public void JLanel(String text) 创建指定文本的标签
public void JLable(String text,int horizontalAlignment) 创建指定文本和指定对齐方式的标签
public void JLabel(String text,Icon image,int horizontalAlignment) 创建指定文本、图像和指定对齐方式的标签

创建一个标签的程序如下:

    import javax.swing.*;
    //继承JFrame类
    public class Swing8 extends JFrame
    JLabel jl=new JLabel(); //定义构造器
    public Swing8()
    {
    this.setTitle("创建标签");
    jl.setText("这是一个标签"); jl.setVerticalAlignment(JLabel.CENTER);//设置标签垂直居中 
    jl.setHorizontalAlignment(JLabel.CENTER);//设置标签水平居中 
    this.add(jl); //将标签添加到窗口中   
    this.setBounds(300,250,300,200); //设置窗口的大小和位置 
    this.setVisible(true); //设置窗口是可见的
    }
    public static void main(String args[]) {
    Swing8 s=new Swing8();
    }

运行结果:

label.png

JButton按钮类

JButton类也有多个构造器,最常用的依然是无参构造器。在JButton按钮类中具有几个很常用的方法。其中setText方法是 来设置按钮上显示的文本,和其对应的是用getText方法来获取按 钮上显示的文本。在JButton按钮类中还有一个经常被使用,即setMnemonic方法,使用该方法可以设置按钮的助记符。助记符就是使用键盘中的Alt加该助记符就能起到相应的功能。

创建一个简单按钮的实例如下:

     import javax.swing.*;
    //继承JFrame类
     public class Swing9 extends JFrame
    {
    JButton jb=new JButton(); //定义构造器
    public Swing9()
    {
    this.setTitle("创建按钮");
    jb.setText("这是一个按钮"); //设置按钮上显示的内容 
    jb.setMnemonic('a'); //设置按钮的助记符 
    this.add(jb); //将按钮添加到窗口中 
    this.setBounds(300,250,300,200); //设置窗口的大小和位置 
    this.setVisible(true); //设置窗口是可见的
    }
    public static void main(String args[]) {
    Swing9 s=new Swing9();
    }

编译运行上面的实例代码之后,创建出一个窗口,整个窗口中只有一个按钮,而且按钮沾满了整个窗口。当我们从键盘上按下Alt+A组合键时相当于点击了这个按钮。这就是助记符的作用。

Swing中的事件

事件是一种很好的用户和界面的交互手段。在事件的发生和响应的过程中需要两个对象,事件监听器和事件源。事件源就是我们常见的一些可交互的控件,例如按钮、文本框和窗口等。但是不同的控件是存在不同的事件的,事件信息被封装在事件对象 中。事件监听器是指实现专门的监听接口的类的对象。每一个事件都有 对应的监听接口,同时在该接口中给出了处理事件的方法。在编写监听 器时需要事件监听接口,同时实现其中的方法,在方法中编写触发事件 后执行的程序。在编写程序时,还需要将监听器注册给事件源,这样才能执行事件。

同一个事件源注册多个监听器:

同一个事件源可以同时注册多个监听器,这种情况下触发事件, 所有的监听器都将执行事件方法,对事件进行处理。
当为同一个事件源注册多个监听器时,监听器的执行顺序并不是 先注册先执行的顺序,而是先注册后执行的顺序来执行的。

实例代码:
import javax.swing.*;
public class Swing5 extends JFrame{
    JButton jb=new JButton();
    int i=0;//按钮被单击的次数
    public Swing5(){
        this.setTitle("创建按钮");
        jb.setText("按钮按下了0次");
        jb.setMnemonic('a');
        this.add(jb);
        //为按钮注册监听器
        jb.addActionListener(new ActionListener() {
            //触发事件时执行的方法
            public void actionPerformed(ActionEvent e){
            Swing5.this.jb.setText("按钮按下了"+(++i)+"次");
            }
        });
        //为按钮注册第二个监听器
        jb.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
            Swing5.this.jb.setText("按钮按下了"+(++i)+"次");
            }

    });
        this.setBounds(100,200,300,250);
        this.setVisible(true);
}
public static void main(String args[]){
    Swing5 s=new Swing5();
}
}

同一个监听器注册给多个事件源

同一个监听器注册给多个事件源的情况下,所有的事件源中的任 意一个触发事件都会通知监听器,并执行监听器中的事件处理方法。将一个监听器注册给多个事件源,从而不管是单击哪一个按钮,都将执行监听器方法。为了辨别是哪一个按钮被按下,在监听器方法中需要判断是哪一个按钮触发了事件,执行的效果是使另一个按钮的显示内容发生变化。

窗体获取和失去焦点事件

窗体中的所有事件都是使用WindowEvent类来表示。窗体获取和失去焦点事件,该事件是通过实现 WindowFocusListener监听接口实现的。

窗体打开、关闭和激活事件

要实现窗体打开、关闭和激活事件只需要实现WindowListener监听接口的监听器。

按钮事件

按钮时具有事件的,当我们单击按钮时就出发了按钮事件,即ActionEvent事件。如果我们希望按钮事件触发后执行我们指定的程序,我们需要为按钮添加动作事件监听器,并且需要为按钮注册动作事件监听器。编写动作事件监听器需要通过实现ActionListener监听接口来完成。

在ActionListener监听接口中只有一个actionPerformed方法,所以在动作事件监听器中只需要实现这个方法。我们可以将触发事件后需要执行的程序写在actionPerformed方法中。定义完监听器后,我们还需要向按钮注册该监听器,注册监听器可以通过addActionListener方法来完成。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容

  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 4,454评论 0 11
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,036评论 0 4
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,202评论 0 2
  • 昨晚看得《情敌蜜月》,本来是无聊加着冲着封面上的霍建华,但是电影结束之后,我并没有被高颜值满足的饱食感,反而是喉间...
    楚楚玖阅读 986评论 1 1
  • 那还是在七八年前,做人力资源顾问公司时认识的一个叫大美的姑娘。她长的胖乎乎,圆圆的脸,圆圆的身体,算不上漂亮。 那...
    心怡雨文阅读 151评论 0 0