java之旅之GUI

来源:互联网 发布:table2excel.js 编辑:程序博客网 时间:2024/05/17 02:22

这里写图片描述

事件处理(响应)

委托事件模型    事件源对象    监听器对象步骤    ①写好界面,事件源对象已经有了    ②选择合适的监听器类型    ③书写监听器的实现类(写好处理代码)    ④产生监听器对象 和事件源对象进行绑定。监听器    ActionListener        默认动作    单独书写一个类,实现监听器接口。    监听器实现方式一:        特点:            ①可以让一个监听器监听多个事件源,用if判断进行分割,但这么做违背了单一职责。因此从设计上讲应该为每一个事件书写单独的监听器(就算辛苦,也要这么做)            如果需要操作非事件源的其他组件,应该传参。            监听器提供的抽象方法--回调方法

书写了这个方法的实现,但不主动调用,交由系统自动调用。
监听器实现方式二:
特点:让容器类同时充当监听器
①只能让一个监听器监听多个事件源,用if判断进行分割,但这么做肯定违背了单一职责
②操作本容器的组件或中间容器,不用传参。
监听器实现方式三:
匿名内部类
在跟事件源对象绑定监听器对象的同时实现监听器类。
特点:
1、每个事件源对象拥有独立的监听器类,同时没有多的java文件,既满足单一,有没有增加文件的数量。
2、操作外部容器类的任何组件或子容器不用传参。
①一个监听器可以绑定多个事件源对象
②一个事件源也可以绑定多个监听器对象
③每个监听器有各自的监听事件类型

布局

空布局边界布局    BorderFrame    BorderLayout        布局方式:

整个布局划分为5个部分,东西南北中,南北要贯通,中间(范围,权利)最大,周边不存在,中间会占领周边,但周边不能占领中间。
使用场景:
不是用来直接放按钮的,是用来放置子容器(中间容器)的。
流布局
FlowFrame
FlowLayout
布局方式:
按从左往右,从上往下,由中间开始的方式依次排放,组件大小根据组件内容确定
组件的位置会随着容器的大小的改变而改变。
使用场景:
放置组件的,不是放置中间容器的,最好只做单行布局
网格布局
GridFrame
GridLayout
布局方式:
按行列将整个容器划分为等大的区域。放入的子容器的数目如果与设置数目不等,优先保证行改变列。
使用场景:
不是用来直接放按钮的,是用来放置子容器(中间容器)的。
嵌套布局
面板嵌套(1、大问题域化小问题域。2、分工合作。)
JPanel
事件处理
卡片布局
翻页效果
整个界面翻页
内容面板ContentP布局设置为卡片布局
局部界面翻页
JPanel设置为卡片布局
第一张被放入的卡片被放在最上面。
每张卡片放入的时候要给出别名
默认显示第一张卡片
翻页步骤:
1、首先得到被设置为卡片布局的那个容器
2、得到这个容器的布局管理器
3、调用布局管理器翻页

界面元素

容器    容器类与组件类        java.swing.包 

容器与组件使用这个包
java.awt.摒弃图形
颜色字体类使用这个包
工具类
颜色
字体
首层容器
JWindom
一个白色框体
JFrame
获取工具对象 ToolKit.getDefaultToolKit()
①设置窗体大小 setSize 像素
②设置窗体位置 setLocation 距离窗体左上角 X Y
窗体退出即关闭 setDefaultCloseOperation(JFrame.退出方法)
最后设置窗体可见 setVisible
JDialog
JOptionpane自带三种对话框
JOptionpane.showInputDialog
JOptionpane.showMessageDialog
JOptionpane.showConfirmDialog
int 类型 0 1 2 -1
JApplet
java小应用程序
子容器(中间容器)
内容面板
组件
标签
JLabel 匈牙利命名法 前半部分 功能描述缩写 后半部分 类型描述
文本框
按钮
下拉列表
单选框
复选框
文本域

package com.lovo.frame;import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.Toolkit;import javax.swing.BorderFactory;import javax.swing.ButtonGroup;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPasswordField;import javax.swing.JRadioButton;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class MyFrame extends JFrame{    private Container contentP;//内容面板    private JLabel msgLab;//文字标签    private JLabel imgLab;//图片标签    private JTextField usernameTxt;//文本框    private JPasswordField pwdTxt;//密码框    private JButton okBtn;//按钮    private JButton getMoentyBtn;//取钱按钮    private JComboBox<String> teacherCmb;//下拉列表    private JTextArea selfArea;//文本域    private JRadioButton maleRad;//单选框    private JRadioButton femaleRad;    private JCheckBox hobbitBox;//复选框    public MyFrame(){        Toolkit tk = Toolkit.getDefaultToolkit();//获取工具对象        this.setSize(500, 400);//设置窗体大小--像素        this.setLocationRelativeTo(null);        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭即退出程序        this.setTitle("我的第一个GUI窗体");//标题栏设置标题        this.setIconImage(tk.createImage("image/icon.png"));//设置标题栏图标        this.setResizable(false);//设置窗体改变大小的能力        this.addContent();        this.setVisible(true);//设置该窗体可见    }    private void addContent(){        this.contentP = this.getContentPane();//获取内容面板        this.contentP.setBackground(Color.WHITE);//设置窗体背景色        this.contentP.setLayout(null);//设置布局管理器为null---代表放入该容器的组件的大小位置全靠自定义        //文本标签        this.msgLab = new JLabel("/"+100);//产生对象        this.msgLab.setText("/"+100);//      this.msgLab.setBorder(BorderFactory.createLineBorder(Color.BLACK));//给标签设置边框--调试用        this.msgLab.setFont(new Font("微软雅黑",Font.BOLD,16));//设置字体//      this.msgLab.setForeground(new Color(82,254,211));//设置字体颜色        this.msgLab.setBounds(100, 20, 40, 25);//设置大小位置        this.contentP.add(this.msgLab);//放入容器        //图片标签        this.imgLab = new JLabel(new ImageIcon("image/fish.jpg"));        this.imgLab.setBounds(200, 20, 243, 167);        this.contentP.add(this.imgLab);        //文本框        this.usernameTxt = new JTextField();        this.usernameTxt.setBounds(20, 70, 40, 25);        this.usernameTxt.setFont(new Font("微软雅黑",Font.BOLD,16));//设置字体//      this.usernameTxt.setForeground(new Color(82,254,211));//设置字体颜色//      this.usernameTxt.setEditable(false);//设置文本框不可编辑        this.contentP.add(this.usernameTxt);        //密码框        this.pwdTxt = new JPasswordField();        this.pwdTxt.setEchoChar('*');        this.pwdTxt.setFont(new Font("微软雅黑",Font.BOLD,16));//设置字体        this.pwdTxt.setForeground(new Color(82,254,211));//设置字体颜色        this.pwdTxt.setBounds(20, 120, 100, 30);        this.contentP.add(this.pwdTxt);        //按钮        this.okBtn = new JButton("<");        this.okBtn.setText("<");        this.okBtn.setFont(new Font("微软雅黑",Font.BOLD,16));//设置字体//      this.okBtn.setForeground(new Color(82,254,211));//设置字体颜色        this.okBtn.setBounds(20, 160, 50, 22);        this.contentP.add(this.okBtn);        this.getMoentyBtn = new JButton(new ImageIcon("image/buttonGet.jpg"));        this.getMoentyBtn.setBounds(20, 200, 140, 50);        this.contentP.add(this.getMoentyBtn);        //下拉列表        this.teacherCmb = new JComboBox<String>();        this.teacherCmb.addItem("周春艳");        this.teacherCmb.addItem("刘弯弯");        this.teacherCmb.addItem("万洁");        this.teacherCmb.addItem("张欣");        this.teacherCmb.addItem("何茹薇");        this.teacherCmb.setEditable(true);//设置为可编辑为true        this.teacherCmb.setBounds(20, 260, 100, 20);        this.contentP.add(this.teacherCmb);        //文本域        this.selfArea = new JTextArea();        JScrollPane scrollP = new JScrollPane(this.selfArea);        scrollP.setBounds(200, 200, 280, 160);        this.contentP.add(scrollP);        //单选框        this.maleRad = new JRadioButton("男");        this.femaleRad = new JRadioButton("女");        this.maleRad.setBounds(20, 290, 50, 25);        this.femaleRad.setBounds(80, 290, 50, 25);        this.maleRad.setBackground(Color.WHITE);        this.femaleRad.setBackground(Color.WHITE);        this.maleRad.setSelected(true);//设置默认选中        this.contentP.add(this.maleRad);        this.contentP.add(this.femaleRad);        ButtonGroup bGroup = new ButtonGroup();//按钮分组        bGroup.add(this.maleRad);        bGroup.add(this.femaleRad);        //复选框        this.hobbitBox = new JCheckBox("兴趣爱好");        this.hobbitBox.setBounds(20, 325, 100, 25);        this.contentP.add(this.hobbitBox);    }}
0 0
原创粉丝点击