辽宁自考 Java语言程序设计 课程代码 01019 备考整理(四)

Java语言程序设计

考试用书: 《Java语言程序设计》(第三版)
出版社:清华大学出版社
作者:邵丽萍、绍光亚、张后扬
出版时间:2008

第8章 图形用户界面

Swing类的层次结构

Swing结构

容器

可以添加其它组件的组件被称为容器。

窗口容器

JFram是一个用来创建窗口的类,它是一个顶级容器框架,在其中可以添加各种组件。
使用方式:

import javax.swing.*;

public class JF0 extends JFrame {
    public JF0 (String s){
        super(s); //调用父类构造方法
        setBounds(200,200,500,400); //设置大小
        setVisible(true); //设置是否显示
        try{
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); // 显示窗口外观
        }catch (Exception e){
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //处理如果外观显示未成功 则关闭窗口对象
        }
    }
}
对话框容器

对话框(Dialog类)是GUI中常见的窗口对象。对话框和普通窗口最大的区别是对话框是依附在某个窗口上的,一旦它所依附的窗口关闭了,对话框也要随着关闭。在对话框窗口中也可以添加其它组件,所以它也是一个容器。

import javax.swing.*;

public class JD extends JDialog {
    public JD (JFrame f, String s){
        super(f,s); //调用父类构造方法
        setBounds(300,300,200,200); //设置大小
        setVisible(true); //设置是否显示
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); //设置默认关闭方法
    }
}
面板容器

面板(JPanel)类是一个无边框的容器,可以包含其它面板或组件,使用面板的目的是为了区分层次,分区域管理各种组件。面板与顶级容器不同,它是一个中间容器,它即是容器又是组件。一个窗口中可以添加多个面板对象。

import javax.swing.*;
import java.awt.*;

public class JP1 extends JFrame {
    public JP1(JFrame f, int x, int y, int w, int h){

        Container c = getContentPane(); //通过JFrame 自带的方法创建面板
        c.setLayout(null);
        c.setBackground(Color.ORANGE);
        f.add(c); //添加面板到 f
        JPanel p = new JPanel(); //通过new的方式创建面板
        p.setBounds(x,y,w,h);
        p.setBackground(Color.blue);
        c.add(p);//添加面板到面板c

    }
}

 JP1 jp1 = new JP1(new JF0("添加面板的窗口"),100,50,200,200);

组件

组件(JComponent)是构成GUI的基本要素,通过对不同事件的响应来完成和用户的交互或组件之间的交互。组件一般作为一个对象放置在容器内。通过容器的add方法可以吧组件加入到容器中。
这部分主要是实践会考,还是多练习熟悉方法和结构。

JLabel //标签组件
JButton //按钮组件
TextField //文本框组件
JTextArea //文本区组件,多行文本
JRadioButton //单选按钮组件
JCheckBox //复选框组件
JComBoBox //下拉列表组件

组件布局管理

组件布局管理器管理各个组件的位置,在容器中使用setLayout方法可以调用不同的布局管理器。

顺序布局管理器

顺序布局(FlowLayout) 是最基本的布局管理器。把组件一个一个从左到右排列,一行排满之后转到下一行继续排列。它会根据容器大小随时调整容器中的组件大小。

边界布局管理器

边界布局(BorderLayout)管理器把容器分为5个区:北区、南区、东区、西区和中区。
边界布局只能容纳5个组件即东、南、西、北、中。(可以嵌套组件,但是嵌套的一层只能有5个组件)

卡片布局管理器

卡片布局(CardLayout)管理器可以管理多个组件,它将组件像卡片一样叠放起来,每次只显示一个。

网格布局管理器

网格布局(GridLayout)管理器把容器区域分成若干个网格,每个网格可以放一个组件。
创建网格布局管理器时可以给出网格的行数和列数。

组件的精确定位方式

容器中存放组件也可以不用布局管理器。

//第一步
setLayout(null); //先通过设置布局管理器为null
//第二步
setBounds(int x, int y, int w, int h); //xy是组件左上角的坐标点,wh是组件的大小。

事件处理机制

Jav的事件处理机制
  1. 事件:程序和用户的交互是通过事件实现的。实现发生后会交给事件处理的方法进行处理,如果没有编写处理方法,程序就不能和用户交互,事件将被忽略。
  2. 事件处理方法:当发生事件时做出的反应,通过监听器对象可以对事件源对象进行监听,当监听到事件时,就可以调用事件处理方法处理事件问题。
  3. 事件处理模型:事件源对象、事件监听器对象、事件对象。
    (1)能产生事件的组件叫做事件源,如按钮。
    (2)事件监听器注册在事件源对象(按钮或包含按钮的容器上),用来监听事件是否发生,当事件发生时将调用事件处理方法解决问题。
    (3)事件对象用来封装已发生的事件信息,在事件发生后,将信息传递给事件处理方法进行处理。
通过自定义内部类创建监听器对象
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class JB1 extends JFrame {
    public JB1(JFrame f, JPanel p){

        f.add(p);
        p.add(new Label("按一下可以听到响声", Label.CENTER));
        Button b = new Button("按钮");

        p.add(b);
        BHandler h = new BHandler();
        b.addActionListener(h);

    }

    public static void main(String args[]){
        JB1 jb1 = new JB1(new JF0("单击按钮事件"), new JPanel());
    }
    private class BHandler implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            Toolkit.getDefaultToolkit().beep();
        }
    }
}

在注册时通过匿名类直接创建监听器对象
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class JB2 extends JFrame {
    public JB2(JFrame f, JPanel p){

        f.add(p);
        p.add(new Label("按一下可以听到响声", Label.CENTER));
        Button b = new Button("按钮");

        p.add(b);

        b.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Toolkit.getDefaultToolkit().beep();
            }
        });

    }

    public static void main(String args[]){
        JB1 jb1 = new JB1(new JF0("单击按钮事件"), new JPanel());
    }

}

通过主类创建监听对象
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class JB3 extends JFrame implements ActionListener {
    
    public JB3(JFrame f, JPanel p){
        f.add(p);
        p.add(new Label("按一下可以听到响声", Label.CENTER));
        Button b = new Button("按钮");
        p.add(b);
        b.addActionListener(this);
    }
    
    public static void main(String args[]){
        JB1 jb1 = new JB1(new JF0("单击按钮事件"), new JPanel());
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Toolkit.getDefaultToolkit().beep();
    }
}

实现多个事件接口的方式

一般是在主类实现多个接口,然后注册这些接口的实现。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

public class DrawLine extends Applet implements MouseListener, MouseMotionListener {

    int x1, y1, x2 , y2;
    public void init(){
        addMouseListener(this);
        addMouseMotionListener(this);
    }
    public void pain(Graphics g){
        g.drawLine(x1, y1, x2 , y2);
    }



    @Override
    public void mouseClicked(MouseEvent e) {

    }

    @Override
    public void mousePressed(MouseEvent e) {
        x1 = e.getX();
        y1 = e.getY();
    }

    @Override
    public void mouseReleased(MouseEvent e) {

    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {

    }

    @Override
    public void mouseDragged(MouseEvent e) {
        x2 = e.getX();
        y2 = e.getY();
        repaint();
    }

    @Override
    public void mouseMoved(MouseEvent e) {

    }
}

事件适配器类与内部类

java.awt.event 包中还声明了一组带Adapter标记的类,称为适配器类。它们是一些抽象类,其中声明方法与接口方法相同。使用Adapter 可以不用实现全部的方法,实现精简代码的目的。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

public class DrawLine extends Applet implements MouseListener, MouseMotionListener {

    int x1, y1, x2 , y2;
    public void init(){
        addMouseListener(new M1());
        addMouseMotionListener(new M2());
    }
    public void pain(Graphics g){
        g.drawLine(x1, y1, x2 , y2);
    }

	private M1 extends MouseAdpter {
    	public void mousePressed(MouseEvent e) {
        	x1 = e.getX();
       	 	y1 = e.getY();
    	}
	}

	private M2 extends MouseMotionAdpter {
    	public void mouseDragged(MouseEvent e) {
        	x2 = e.getX();
        	y2 = e.getY();
        	repaint();
    	}
	}
}

内部类

Java中可以把一个类声明为另一个类的成员。这样的类被称为内部类。
内部类可以无条件的使用主类的所有成员,包括私有成员。内部类的作用域仅限于包容它的主类。
内部类可以被声明为static、最终类、抽象类。

创建容器与组件的基本步骤小结

(1)创建顶级容器(通常为窗体对象)。
(2)创建内容面板,设置背景颜色,设置布局管理器。
(3)创建普通面板,设置背景颜色,设置位置、大小,设置布局管理器。
(4)创建组件,设置背景颜色,设置其位置、大小、字体等。
(5)将面板添加到窗口,将组件添加到指定面板。
(6)创建事件监听器,实现事件接口方法。
(7)给事件源注册监听器。

第9章 高级组件

菜单栏

菜单栏是图形用户界面的重要组成部分,主要由菜单棒(MenuBar)、菜单(Menu)、菜单项(MenuItem)和复选菜单项(CheckBoxMenuItem)等对象组成。

工具栏

树形菜单

选项卡面板

JApplet容器

表格

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值