Swing笔记(一部分)

13.1 Swing概述
GUI为程序提供图形界面,它最初的设计目的是为程序员构建一个通用的GUI,十七能够在所有平台上运行,但在java1.0中基础类AWT(抽象窗口工具箱)并没有达到这个要求,于是Swing出现了,他是AWT组件的增强组件,但是它并不能完全替代Awt组件,这两种组件需要同时出现在一个图形界面中。
13.1.1 Swing特点
原来的AWT组件来自于java.awt包,当含有AWT组件的java应用程序在不同的平台执行时,每个平台的GUI组件的显示会有所不同,但是在不同平台上运行使用Swing开发的应用程序时,就可以统一GUI组件的风格,因为Swing组件允许编程人员在跨平台时指定同意的外观和风格。
Swing组件通常被称为“轻量级组件”,因为他完全由java语言编写,而java是不依赖于操作系统的语言,它可以在任何平台上运行;相反,依赖于本地平台的组件被称之为重量级组件,如AWT组件就是依赖本地平台的窗口系统来决定组件的功能外观和风格。Swing主要有以下特点:
轻量级组件
可插入外观组件
13.1.2 Swing包为了有效地使用Swing组件,必须了解Swing包的层次结构和继承关系,其中比较重要的是Component类,Container类和JComponent类。
继承关系为:
java.lang.Object类->java.awt.Component类->java.awt.Container类->javax.swing.JComponent类
在Swing组件中大多数Gui组件都是Component类的直接或间接子类,JComponent类是Swing组件各种特性的存放位置,这些组件的特性包括设定组件边界,GUI组件自动滚动等
在Swing组件中最终要的父类是Container类,而其有最重要的两个子类分别为java.awt.Window与java.awt.Frame,除了以往的AWT类组件会继承这两个类之外,现在的Swing组件也扩展了这两个类。从以上继承中可以发现顶层父类为Component类与Container类,所以java关于窗口组件的编写,都与组件以及容器的概念相关联
13.1.3 常用Swing组件概述
JButton
代表Swing按钮,按钮可以带一段图片或文字
JCheckBox
代表Swing中的复选框组件
JComBox
代表下拉列表框,可以在下拉显示区域显示多个选项
JFrame
代表Swing的框架类
JDialog
代表Swing版本的对话框
JLabel
代表Swing的标签组件
JRadioButton
代表Swing的单选按钮
JList代表能够在用户界面显示一系列条目的组件
JTextField
代表文本框
JPasswordField
代表密码框
JTextArea
代表Swing中的文本区域
JOptionPane
代表Swing中的一些对话框
13.2 常用窗体
窗体作为Swing应用程序中组件的承载体,处于非常重要的位置。Swing中常用的窗体包括JFrame和JDialog。
13.2.1 JFrame窗体
JFrame窗体是一个容器,他是Swing程序中各个组件的载体,可以将JFrame看作是承载这些Swing组件的容器。在开发程序时可以通过继承java.swing.JFrame类创建一个窗体,在这个窗体中添加组件,同时为组件设置时间,由于该窗体继承了JFrame类,所以它拥有最大化,最小化,关闭等按钮。
JFrame的语法:

JFrame if=new JFrame(title);
Container container=jf.getContentPane();

jf:JFrame类的对象
container:Container类的对象,可以使用JFrame对象调用getContentPane()方法获取。
Swing组件的船体通常与组件和容器有关,所以子啊JFrame对象创建完成后,需要调用getContentPane()方法将窗体转化位容器,然后在容器里添加租价或设置布局管理器,通常这个容器包含和现实组件,如需要将组件添加之容器,可以使用来自Container类的add()方法进行设置。
例如:
container.add(new JButton(“按钮”));//JButton按钮组件
在容器中添加组件后,也可以使用Container类的remove()方法将这些徐建从容器中删除。例如:
container.remove(“按钮”);
例子如下:

/*
创建一个JFrame窗体
 */

import javax.swing.*;//导入Swing包
import java.awt.*;//导入awt包
import java.util.Scanner;//导入Scanner

import static java.lang.System.out;


public class A {//定义一个类
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String aa=input.next();
        out.println(aa);
        JFrame jf=new JFrame(aa);//实例化一个JFrame对象
        Container co=jf.getContentPane();//获取一个容器
        JLabel jl=new JLabel(aa);//创建一个JLabel标签
        jl.setHorizontalAlignment(SwingConstants.CENTER);//使标签上的文字居中

        co.add(jl);//将标签添加到容器中
        co.setBackground(Color.red);//设置容器的背景颜色
        jf.setVisible(true);//使窗体可视
        jf.setSize(900,600);//设置窗体大小
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗体关闭方式




    }
}

在上例中实例了JFrame对象,JFrame常用的构造方法有以下两种:
public JFrame();
此方法生成一个不带有标题的窗体
public JFrame(String title)
此方法生成一个带有标题的窗体
在Swing中可以使用setVisible(true)令方法可见
使用setSize(int x,int y)来设置窗体的大小,x,y代表窗体的长与宽;
创建窗体后要给予一个关闭方式,可以调用setDefaultCloseOperation方法关闭窗体,其提供了多种管理方式,常用的如下:
DO_NOTHING_ON_CLOSE 什么都不做将窗体关闭
DISPOSE_ON_CLOSE 任何注册监听程序对象后会自动隐藏并释放窗体。
HIDE_ON_CLOSE 隐藏窗口的默认窗口关闭
EXIT_ON_CLOSE 退出应用程序默认窗口关闭
实质上是将一个int常量封装在javax.swing.WindowConstants 接口中。
13.2.2 JDialog窗体
JDialog窗体是Swing组件中的对话框,他继承了AWT组件中的java.awt.Dialog类。其功能是从一个窗体中弹出另一个窗体,就像是使用IE浏览器弹出的对话框一样。其本质上就是另一种类型的窗体,其与JFrame窗体类似,在使用时也要调用getContentPane()方法将其转化为容器,然后在容器中设置窗体的特性。
在应用程序中创建JDialog窗体需要实例化JDialog类,通常可以使用以下几个JDialog类的构造方法。
public JDialog()创建一个没有标题和父窗体的对话框
public JDialog(Frame f)创建一个没有标题,指定父窗体的对话框
public JDialog(frame f,boolean model)创建一个没有标题,指定父窗体的指定类型的对话框
public JDialog(Frame f,String title)创建一个指定标题和父窗体的对话框
public JDialog(Frame f,boolean model ,String title)创建一个指定标题,指定父窗体的指定类型的对话框
例子如下:

/*
* 创建一个JDialog窗体
* */
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.Scanner;

public class B extends JFrame{
    public static void main(String[] args) {
        new B();
    }
    public B(){
        Scanner input=new Scanner(System.in);
        JFrame jf=new JFrame(input.next());
        Container co=jf.getContentPane();
        co.setLayout(null);
        JLabel jl=new JLabel("这是一个窗体");
        jl.setHorizontalAlignment(SwingConstants.CENTER);

        JButton bl=new JButton("弹出对话框");
        bl.setBounds(1,1,100,21);

        String a[]={};
        bl.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new MyJDialog(B.this).setVisible(true);
            }
        });
        co.add(jl);
        co.add(bl);
        co.setBackground(Color.white);
        jf.setVisible(true);
        jf.setSize(600,400);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}
class MyJDialog extends JDialog{
    public MyJDialog(B b){
        super (b,"第一个JDialog窗体");
        Container co=getContentPane();
        co.add(new JLabel("这是一个对话框"));
        setBounds(10,120,120,120);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值