Java学习——复习 第八天 Swing程序设计、AWT绘图、事件监听

16.Swing程序设计

    1.Swing概述--Swing主要用来开发GUI程序,GUI即图形图像界面,他是应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮等元素。

        1.1Swing的特点--允许开发人员跨平台时指定统一的外观和风格,Swing不依赖操作系统,可以在多平台上使用,将Swing组件称为‘轻量级组件’AWT组件则相反比较依赖本地操作系统,所以被称为‘重量级组件’

        1.2Swing包


        1.3常用Swing组件

    2常用窗体

        2.1JFrame窗体--是一个容器,是Swing程序中各组件的载体

            JFrame类的常用构造方法:

            1)public JFrame():创建一个不可见、没有标题的新窗体。

            2)public JFrame(String title):创建一个不可见但有标题的窗体

                jJFrame常用方法

代码实现:

public classJFreamTest extends JFrame {

        publicvoid CreateJFrame(String title) { // 定义一个CreateJFrame()方法

                 JFramejf = new JFrame(title); // 创建一个JFrame对象

                 Containercontainer = jf.getContentPane(); // 获取一个容器

                 JLabeljl = new JLabel("这是一个JFrame窗体"); // 创建一个JLabel标签

                 //使标签上的文字居中

                 jl.setHorizontalAlignment(SwingConstants.CENTER);

                 container.add(jl);// 将标签添加到容器中

                 container.setBackground(Color.white);// 设置容器的背景颜色

                 jf.setVisible(true);// 使窗体可视

                 jf.setSize(200,150); // 设置窗体大小

                 //设置窗体关闭方式

                 jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        }

 

        publicstatic void main(String args[]) { // 在主方法中调用CreateJFrame()方法

                 newJFreamTest().CreateJFrame("创建一个JFrame窗体");

        }

}

运行结果:


        2.2JDialog对话框窗体--是Swing组件中的对话框,功能是从一个窗体中实例化。

            常用Jdialog构造类

代码实现:

class MyJDialog extends JDialog { // 创建新类继承JDialog类

 

        privatestatic final long serialVersionUID = 1L;

 

        publicMyJDialog(MyFrame frame) {

                 //实例化一个JDialog类对象,指定对话框的父窗体、窗体标题和类型

                 super(frame,"第一个JDialog窗体", true);

                 Containercontainer = getContentPane(); // 创建一个容器

                 container.add(newJLabel("这是一个对话框")); // 在容器中添加标签

                 setBounds(120,120, 100, 100); // 设置对话框窗体大小

        }

}

 

public class MyFrame extends JFrame { //创建新类

 

        privatestatic final long serialVersionUID = 1L;

 

        publicstatic void main(String args[]) {

                 newMyFrame(); // 实例化MyJDialog类对象

        }

       

        publicMyFrame() {

                 Containercontainer = getContentPane(); // 创建一个容器

                 container.setLayout(null);

                 JLabeljl = new JLabel("这是一个JFrame窗体"); // 在窗体中设置标签

                 //将标签的文字置于标签中间位置

                 jl.setHorizontalAlignment(SwingConstants.CENTER);

                 container.add(jl);

                 JButtonbl = new JButton("弹出对话框"); // 定义一个按钮

                 bl.setBounds(10,10, 100, 21);

                 bl.addActionListener(newActionListener() { // 为按钮添加鼠标单击事件

                                          publicvoid actionPerformed(ActionEvent e) {

                                                  //使MyJDialog窗体可见

                                                  newMyJDialog(MyFrame.this).setVisible(true);

                                          }

                                  });

                 container.add(bl);// 将按钮添加到容器中

                

                 container.add(bl);

                 container.setBackground(Color.white);

                 setSize(200,200);

                 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

                 setVisible(true);

        }

}

 运行结果:

    3常用布局管理器:

        3.1绝对布局--硬性指定组件在容器中的位置和大小,可以使用绝对坐标来指定组件的位置。

代码实现:

public classAbsolutePosition extends JFrame {

        /**

         *

         */

        privatestatic final long serialVersionUID = 1L;

 

        publicAbsolutePosition() {

                 setTitle("本窗体使用绝对布局");// 设置该窗体的标题

                 setLayout(null);// 使该窗体取消布局管理器设置

                 setBounds(0,0, 200, 150); // 绝对定位窗体的位置与大小

                 Containerc = getContentPane(); // 创建容器对象

                 JButtonb1 = new JButton("按钮1"); // 创建按钮

                 JButtonb2 = new JButton("按钮2"); // 创建按钮

                 b1.setBounds(10,30, 80, 30); // 设置按钮的位置与大小

                 b2.setBounds(60,70, 100, 20);

                 c.add(b1);// 将按钮添加到容器中

                 c.add(b2);

                 setVisible(true);// 使窗体可见

                 //设置窗体关闭方式

                 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        }

 

        publicstatic void main(String[] args) {

                 newAbsolutePosition();

        }

}

运行结果:


        3.2流布局--最基本的布局管理器,在整个容器中的布局正如其名,像‘流’一样从左到右摆放组件,知道占据这一行的所有空间,在向下移动一行。

代码实现:

public classFlowLayoutPosition extends JFrame {

        /**

         *

         */

        privatestatic final long serialVersionUID = 1L;

 

        publicFlowLayoutPosition() {

                 setTitle("本窗体使用流布局管理器");// 设置窗体标题

                 Containerc = getContentPane();

                 //设置窗体使用流布局管理器,使组件右对齐,并且设置组件之间的水平间隔与垂直间隔

                 setLayout(newFlowLayout(2, 10, 10));

                 for(int i = 0; i < 10; i++) { // 在容器中循环添加10个按钮

                         c.add(newJButton("button" + i));

                 }

                 setSize(300,200); // 设置窗体大小

                 setVisible(true);// 设置窗体可见

                 //设置窗体关闭方式

                 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        }

       

        publicstatic void main(String[] args) {

                 newFlowLayoutPosition();

        }

}

运行结果:


        3.3边界布局--默认不指定窗体布局时,Swing指定的布局模式是边界布局

代码实现:

public classBorderLayoutPosition extends JFrame {

        publicBorderLayoutPosition() {

                 setTitle("这个窗体使用边界布局管理器");

                 Containerc = getContentPane(); // 定义一个容器

                 setLayout(newBorderLayout()); // 设置容器为边界布局管理器

                 JButtoncenterBtn = new JButton("中"),

                         northBtn= new JButton("北"),

                         southBtn= new JButton("南"),

                         westBtn= new JButton("西"),

                         eastBtn= new JButton("东");

                 c.add(centerBtn,BorderLayout.CENTER);// 中部添加按钮

                 c.add(northBtn,BorderLayout.NORTH);// 北添加按钮

                 c.add(southBtn,BorderLayout.SOUTH);// 南部添加按钮

                 c.add(westBtn,BorderLayout.WEST);// 西部添加按钮

                 c.add(eastBtn,BorderLayout.EAST);// 东部添加按钮

                 setSize(350,200); // 设置窗体大小

                 setVisible(true);// 设置窗体可见

                 //设置窗体关闭方式

                 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        }

        publicstatic void main(String[] args) {

                 newBorderLayoutPosition();

        }

}

运行结果:


        3.4网格布局--将容器划分为网格,所有组件可以按行和列进行排列

            网格布局主要有以下两个构造方法

            1)public GridLayout(int rows,int columns)方法。  

            2)public GridLayout(int rows,int columns,int horizGap,int vertGap)方法。

代码实现:

public classGridLayoutPosition extends JFrame {

        /**

         *

         */

        privatestatic final long serialVersionUID = 1L;

 

        publicGridLayoutPosition() {

                 Containerc = getContentPane();

                 //设置容器使用网格布局管理器,设置7行3列的网格

                 setLayout(newGridLayout(7, 3, 5, 5));

                 for(int i = 0; i < 20; i++) {

                         c.add(newJButton("button" + i)); // 循环添加按钮

                 }

                 setSize(300,300);

                 setTitle("这是一个使用网格布局管理器的窗体");

                 setVisible(true);

                 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        }

       

        publicstatic void main(String[] args) {

                 newGridLayoutPosition();

        }

}

           运行结果

    4常用面板

        4.1JPanel面板--是一种容器,他继承java.awt.Container类。

代码实现:

public classJPanelTest extends JFrame {

        /**

         *

         */

        privatestatic final long serialVersionUID = 1L;

 

        publicJPanelTest() {

                 Containerc = getContentPane();

                 //将整个容器设置为2行1列的网格布局

                 c.setLayout(newGridLayout(2, 1, 10, 10));

                 //初始化一个面板,设置1行3列的网格布局

                 JPanelp1 = new JPanel(new GridLayout(1, 3, 10, 10));

                 JPanelp2 = new JPanel(new GridLayout(1, 2, 10, 10));

                 JPanelp3 = new JPanel(new GridLayout(1, 2, 10, 10));

                 JPanelp4 = new JPanel(new GridLayout(2, 1, 10, 10));

                 p1.setBorder(BorderFactory.createTitledBorder("面板1"));

                 p2.setBorder(BorderFactory.createTitledBorder("面板2"));

                 p3.setBorder(BorderFactory.createTitledBorder("面板3"));

                 p4.setBorder(BorderFactory.createTitledBorder("面板4"));

                 p1.add(newJButton("1")); // 在面板中添加按钮

                 p1.add(newJButton("1"));

                 p1.add(newJButton("2"));

                 p1.add(newJButton("3"));

                 p2.add(newJButton("4"));

                 p2.add(newJButton("5"));

                 p3.add(newJButton("6"));

                 p3.add(newJButton("7"));

                 p4.add(newJButton("8"));

                 p4.add(newJButton("9"));

                 c.add(p1);// 在容器中添加面板

                 c.add(p2);

                 c.add(p3);

                 c.add(p4);

                 setTitle("在这个窗体中使用了面板");

                 setSize(420,200);

                 setVisible(true);

                 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        }

       

        publicstatic void main(String[] args) {

                 newJPanelTest();

        }

}

运行结果:


        4.2JScrollPane滚动面板--带滚动条的

代码实现:

public classJScrollPaneTest extends JFrame {

        /**

         *

         */

        privatestatic final long serialVersionUID = 1L;

 

        publicJScrollPaneTest() {

                 Containerc = getContentPane(); // 创建容器

                 JTextAreata = new JTextArea(20, 50); // 创建文本区域组件

                 JScrollPanesp = new JScrollPane(ta); // 创建JScrollPane面板对象

                 c.add(sp);// 将该面板添加到该容器中

                

                 setTitle("带滚动条的文字编译器");

                 setSize(200,200);

                 setVisible(true);

                 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        }

       

        publicstatic void main(String[] args) {

                 newJScrollPaneTest();

                

        }

       

}

运行结果:


    5标签组件与图标

        5.1JLabel标签组件--简单的显示文本和图片

            JLabel的构造方法

        

        5.2图标的使用

            1)创建图标

代码实现:

public classDrawIcon implements Icon { // 实现Icon接口

        privateint width; // 声明图标的宽

        privateint height; // 声明图标的长

       

        publicint getIconHeight() { // 实现getIconHeight()方法

                 returnthis.height;

        }

       

        publicint getIconWidth() { // 实现getIconWidth()方法

                 returnthis.width;

        }

       

        publicDrawIcon(int width, int height) { // 定义构造方法

                 this.width= width;

                 this.height= height;

        }

       

        //实现paintIcon()方法

        publicvoid paintIcon(Component arg0, Graphics arg1, int x, int y){

                 arg1.fillOval(x,y, width, height); // 绘制一个圆形

        }

       

        publicstatic void main(String[] args) {

                 DrawIconicon = new DrawIcon(15, 15);

                 //创建一个标签,并设置标签上的文字在标签正中间

                 JLabelj = new JLabel("测试", icon, SwingConstants.CENTER);

                 JFramejf = new JFrame(); // 创建一个JFrame窗口

                 Containerc = jf.getContentPane();

                 c.add(j);

                 jf.setSize(100,100);

                 jf.setVisible(true);

                 jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        }

}

运行结果:


            2)使用图片创建图标


代码实现:

public classMyImageIcon extends JFrame {

 

        privatestatic final long serialVersionUID = 1L;

 

        publicMyImageIcon() {

                 Containercontainer = getContentPane();

                 //创建一个标签

                 JLabeljl = new JLabel("这是一个JFrame窗体", JLabel.CENTER);

                 //获取图片所在的URL

                 URLurl = MyImageIcon.class.getResource("imageButton.jpg");

                 Iconicon = new ImageIcon(url); // 实例化Icon对象

                 jl.setIcon(icon);// 为标签设置图片

                 //设置文字放置在标签中间

                 jl.setHorizontalAlignment(SwingConstants.CENTER);

                 jl.setOpaque(true);// 设置标签为不透明状态

                 container.add(jl);// 将标签添加到容器中

                 setSize(250,100); // 设置窗体大小

                 setVisible(true);// 使窗体可见

                 //设置窗体关闭模式

                 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        }

       

        publicstatic void main(String args[]) {

                 newMyImageIcon(); // 实例化MyImageIcon对象

        }

}

运行结果:


    6文本组件

        6.1JTextField文本框组件

代码实现:

public classJTextFieldTest extends JFrame{

 

        /**

         *

         */

        privatestatic final long serialVersionUID = 1L;

        publicJTextFieldTest(){

                 setSize(250,100);

                 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

                 Containercp=getContentPane();

                 getContentPane().setLayout(newFlowLayout());

                 finalJTextField jt=new JTextField("aaa",20);

                 finalJButton jb=new JButton("清除");

                 cp.add(jt);

                 cp.add(jb);

                 jt.addActionListener(newActionListener(){

                         publicvoid actionPerformed(ActionEvent arg0) {

                                  //TODO 自动生成方法存根

                                  jt.setText("触发事件");

                         }

                 });

                 jb.addActionListener(newActionListener(){

                        

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值