博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Java从入门到精通》第十三章学习笔记
阅读量:6873 次
发布时间:2019-06-26

本文共 8465 字,大约阅读时间需要 28 分钟。

第十三章 Swing程序设计

一、Swing概述

Swing是GUI(图形用户界面Graphic User Interface)开发工具包,在AWT(抽象窗口工具 Abstract Windows Tool)的基础上使开发跨平台的Java应用程序界面成为可能。使用Swing开发的Java程序,其界面是不受本地系统平台限制的。

二、Swing常用窗体

1、JFrame框架窗体

JFrame窗体是一个容器,它是Swing程序中各个组建的载体,可以通过继承java,swing.JFrame类创建一个窗体,在这个窗体中添加组建,同时为各个组建设置事件(方法)。

1 JFrame jf=new JFrame(title);        //创建一个标题栏内容为title字符串的JFrame窗体2 Container container=jf.getContentPane();      3 //通过jf的getContentPan()方法为jf窗体对象转换成一个Container类的容器对象 4 //对于这个容器,可以通过add()方法为其添加组件,也可以通过remove()方法移除组件
import java.awt.Color;import java.awt.Container;import javax.swing.*;public class Example  {    public void CreateJFrame(String title){                     JFrame jf=new JFrame(title);                //实例化一个JFrame对象        Container container=jf.getContentPane();    //获取jf的一个容器        JLabel jl=new JLabel("这是一个JFRAME窗体");        //创建一个标签        jl.setHorizontalAlignment(SwingConstants.CENTER);    //设置标签文字居中        container.add(jl);                    //把标签添加到容器中        container.setBackground(Color.gray);    //设置容器背景颜色        jf.setVisible(true);        //设置窗体是否可见        jf.setSize(200,150);         //设置窗体尺寸        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);     //设置窗体关闭方法    }        public static void main(String args[]){        new Example().CreateJFrame("创建一个JFrame窗体");    }}

2、JDialog窗体:是Swing组件中的对话框,继承了AWT组件中的java.awt.Dialog类。其功能是从一个窗体中弹出另一个窗体,JDialog窗体在使用时需要调用getContentPane()方法将其转换为容器,然后在容器中设置相关特性。一般使用如下构造方法:

public JDialog();   //创建一个没有标题和父窗体的对话框public JDialog(Frame f);  //创建一个指定父窗体的对话框,没有标题public JDialog(Frame f,boolean model);  //创建一个指定类型的对话框,并指定父窗体,没有标题public JDialog(Frame f,String title);  //创建一个父窗体为f标题栏内容为title的对话框public JDialog(Frame f,String title,boolean model);//创建一个指定标题、父窗体和指定类型的对话框

 

1 import java.awt.*; 2 import java.awt.event.*; 3  4 import javax.swing.*; 5 public class Example extends JDialog{ 6     public Example(){ 7         //实例化一个JDialog类对象,指定父窗体,标题和类型 8         super(new MyFrame(),"第一个JDialog窗体",true); 9         Container container=getContentPane();        //创建一个容器10         container.add(new JLabel("这是一个对话框"));        //在容器中添加标签11         setSize(100,100);            //设置对话框窗体大小        12     }13     public static void main(String[] args){14         new Example();15     }16 }17 class MyFrame extends JFrame{        //创建新类18     public MyFrame(){19         Container container=getContentPane();        //创建一个容器20         container.setLayout(null);21         JLabel jl=new JLabel("这是一个JFrame窗体");                    //在窗体中设置标签22         jl.setHorizontalAlignment(SwingConstants.CENTER);        //标签文字设置居中23         container.add(jl);24         JButton bl=new JButton("弹出对话框");            //定义一个按钮25         bl.setBounds(10,10,100,21);26         bl.addActionListener(new ActionListener() {        //为按钮添加鼠标单机事件27             public void actionPerformed(ActionEvent e) {28                 new Example().setVisible(true);     //使MyJDialog窗体可见29             }30         });31         container.add(bl);      //添加按钮到容器中32     }33 }

3、标签组件与图标

(1)标签的使用:Java中由JLabel类定义标签,父类为JComponent类。一般只显示一行只读文本,一个图像或带图像的文本,并不能产生任何事件,仅仅单纯显示文本和图片。

public JLabel();    //创建一个不带图标和文本的标签对象public JLabel(Icon icon);    //创建一个带图标的JLabel对象public JLabel(Icon icon,int alignment);  //创建一个带图标的JLabel对象,并设置图标水平对齐方式public JLabel(String string,int alignment);  //创建一个带文本的JLabeil对象,并设置文字水平对齐方式public JLabel(String string,Icon icon,int alignment);  //创建一个带文本和图标的JLabeil对象,并设置标签内容水平对齐方式

 (2)图标的使用:Swing中的图标可以设置在按钮、标签等组件上。

//图标的创建方式,可以通过Icon接口来创建,如果使用该接口,必须实现接口中的三个方法:public int getIconHeight();public int getIconWidth();public void paintIcon(Compent arg0,Graphics arg1,int arg2,int arg3);
1 import java.awt.*; 2 import javax.swing.*; 3 public class DrawIcon implements Icon { 4     private int width; 5     private int height; 6     public int getIconWidth(){ 7         return this.width; 8     } 9     public int getIconHeight(){10         return this.height;11     }12     public DrawIcon(int width,int height){13         this.width=width;14         this.height=height;                15     }16     public void paintIcon(Component arg0,Graphics arg1,int x,int y){17         arg1.fillOval(x,y,width,height);18     }19 20     public static void main(String[] args) {21         DrawIcon icon=new DrawIcon(15, 15);22         23         //创建一个标签,并设置标签上的文字居中24         JLabel jl=new JLabel("Test",icon,SwingConstants.CENTER);25         JFrame jf=new JFrame();26         Container c=jf.getContentPane();27     }28 29 }

上述通过绘制方法创建图标,也可以使用图片创建,Swing通过javax.swing.ImageIcon类根据图片实现图标,ImageIcon类实现了Icon接口。

import java.awt.Component;import java.awt.Container;import java.awt.Graphics;import java.net.URL;import javax.swing.*;public class MyImageIcon extends JFrame{    public MyImageIcon(){        Container container=getContentPane();        JLabel jl=new JLabel("这是一个JFrame窗体",JLabel.CENTER);        URL url=MyImageIcon.class.getResource("1.jpg");        ImageIcon icon=new ImageIcon(url);        jl.setIcon(icon);        jl.setHorizontalAlignment(SwingConstants.CENTER);        jl.setOpaque(true);         //设置标签不透明        container.add(jl);        setSize(250,100);        setVisible(true);        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);    }    public static void main(String[] args) {        new MyImageIcon();    }}

 三、常用布局管理器

Swing提供的常用布局管理器包括流布局管理器、边界布局管理器、网格布局管理器。除使用布局管理器之外也可以使用绝对布局。

1、绝对布局:即明确指定组件在容器中的位置和大小,步骤如下:

使用Container.setLayout(null)先取消使用布局管理器;再使用Component.setBounds()方法设置每个组件的大小和位置。

import java.awt.Container;import javax.swing.*;public class AbsolutePosition extends JFrame {    public AbsolutePosition(){        setTitle("本窗体使用绝对布局");        setLayout(null);        //使该窗体取消布局管理器设置        setBounds(0,0,200,150);        //绝对定位窗体的位置和大小        Container c=getContentPane();        //创建容器对象        JButton b1=new JButton("按钮1");        JButton b2=new JButton("按钮2");        b1.setBounds(100,30,80,30);         //设置按钮的位置和大小        b2.setBounds(60,70,100,20);        c.add(b1);        c.add(b2);        setVisible(true);        //使窗体可见        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);    //设置窗体关闭方式    }    public static void main(String[] agrs){        new AbsolutePosition();    }    }

2、流(FlowLayout)布局管理器:是布局管理器中最基本的布局管理器,像“流”一样从左到右摆放各个组件,直到占据了这一行的所有空间,然后再向下移动一行。默认情况下,组件在每一行都是居中排列,但这个也可以通过设置更改。常用构造方法如下:

public FlowLayout();

public FlowLayout(int alignment);

public FlowLayout(int alignment,int horizGap,int vertGap);

构造方法中的alignment参数表示组件在每一行的具体摆放位置,具体可以被赋予三个值:FlowLayout.LEFT=0;FlowLayout.CENTER=1;FlowLayout.RIGHT=2;分别对应左对齐、居中、右对齐。

horizGap和vertGap分别对应以像素为单位的各组件之间的水平间隔与垂直间隔。

import java.awt.Container;import java.awt.FlowLayout;import java.awt.LayoutManager;import javax.swing.*;public class FlowLayoutPosition extends JFrame {    public FlowLayoutPosition(){        setTitle("本窗体采用流布局管理器");        Container c=getContentPane();        //设置窗体使用流布局管理器,使组件用右对齐方式排列,并设置水平间隔10px,垂直间隔10px        setLayout(new FlowLayout(0,10,10));  //书上代码,为何不行?        for(int i=0;i<10;i++){            c.add(new JButton("button"+i));        }        setSize(300,200);        setVisible(true);        //使窗体可见        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);    }        public static void main(String[] agrs){        new FlowLayoutPosition();    }}

3、边界布局管理:该布局是窗体的默认布局管理器。一般边界布局管理器可以把容器划分为东西南北中五个区域,容器在使用add()方法时可以设置该添加组件在容器中的设置区域。

import java.awt.BorderLayout;import java.awt.Container;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.WindowConstants;public class BorderLayoutPosition extends JFrame {    String[] border={"Center","North","South","West","East"};    String[] buttonName={"center button","north button","south button","west button","east button"};    public BorderLayoutPosition(){        setTitle("XXX");        Container c=getContentPane();        setLayout(new BorderLayout(5,5));        for(int i=0;i

4、网格布局管理器:组件按行和列进行布置,每个组件大小都相同,并且填满整个网格,网格和组件的大小随窗体而编号。

import java.awt.Container;import java.awt.GridLayout;import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.WindowConstants; public class GridLayoutPositon extends JFrame { public GridLayoutPositon(){ setTitle("网格布局"); Container c=getContentPane(); setLayout(new GridLayout(3,5)); //设置网格为3*5 for(int i=0;i<19;i++){ c.add(new JButton("button"+i)); } setSize(300,300); setVisible(true); //使窗体可见 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] agrs){ new GridLayoutPositon(); } }

 

转载于:https://www.cnblogs.com/tsembrace/p/4662988.html

你可能感兴趣的文章
南阳60(谁获得了最高奖学金)
查看>>
python 高级函数
查看>>
myeclipse从svn检出代码转成maven后格式有误解决方法
查看>>
F.Cards with Numbers
查看>>
Learn Python 004: string slicing
查看>>
[转载] 教你如何迅速秒杀掉:99%的海量数据处理面试题
查看>>
checkbox复选框的一些深入研究与理解
查看>>
简单入门Buffer
查看>>
【HDU】6110 路径交(2017百度之星) 线段树+RMQ-LCA+树链的交
查看>>
自定义Attribute 服务端校验 客户端校验
查看>>
Java锁系列|Java锁体系(一)
查看>>
SDN第四次作业
查看>>
HTML5之本地存储SessionStorage
查看>>
c语言学习之基础知识点介绍(三):scanf函数
查看>>
python lambda
查看>>
ubuntu配置caffe的python接口pycaffe
查看>>
C#--笔记
查看>>
[题集]一些有趣的问题
查看>>
[HNOI2010]城市建设
查看>>
系统设计 样题
查看>>