• 五,图形界面编程


    五,图形界面编程

    一,图形界面编程swt;

    1,awt

    1,图形类 Button

    2,辅助类

    1,工具类

    2,字体类

    3,颜色类

    2,Swing

    1,图形类 jButton

    二,容器与组件

    1,首层容器 Contoner

    1,所有的中间容器和组件都放在首层容器里

    2,常用的首层容器

    JApplet-动画效果-过时

    Jdiologo-弹出框

    Jframe-常用的首层容器

    Jwindow

    3,先new jframe对象,在设置宽高 ,ste size(宽,高);

    内宽高,先水平在垂直先宽后高,单位像素

    4,设置窗体大小为可不可变 setResizable(false);

    5,设置外边框 setLocation(x,y);

    内宽高,先水平在垂直先宽后高,单位像素

    6,工具类的调用;Toolkit tk = Toolkit.getDefaultToolkit();

    tk.getScreenSize().getWidth();获取当前系统的像素宽度,

    getScreenSize().getHeight();获取当前系统的像素高度

    以上两个返回类型是double类型的

    7,设置标题;this.setTitle("我的第一个窗体");

    8,设置图标;this.setIconImage(tk.createImage("img/hp.JPG"));

    9,设置窗体关闭,程序即结this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    10,设置窗体可见(放最后);this.setVisible(true);

    2,中间容器

    1,中间容器可以放中间容器和japanl面板

    2,获取内容面板(JFrame自带;this.con = this.getContentPane();

    3,改变内容面板背景色,改JFrame背景没有效果this.con.setBackground(Color.WHITE)

    4,布局管理器;(有布局管理器主动设置组件大小是没有用的)

    1,空布局,绝对定位,要把默认的布局管理器设为空this.con.setLayout(null);

    2,边界布局管理器---BorderLayout;

    this.con.setLayout(new BorderLayout());

    this.con.add(两个参一个是数据,位置上下左右);

    特点:

    1、将整个容器划分为5个部分,口诀:东西南北中,南北要贯通,中间最大;

    2、中间最大不仅指中间区域最大,也指中间权利最大。当周边不存在的时候,

    中间会去占领周边;中间不存在,周边是不能占领中间的;

    3、周边面积要扩大,不能靠直接设置大小和位置,

    只能靠增减内容把区域撑起来----不能靠空布局来撑

    4、BorderLayout是JFrame的默认的布局管理器

    适用场景:

    其特点决定,边界布局管理器就不是用来直接放置组件

    (只有极少的情况需要一个组件占据东西南北中某个区域)

    它更多的用途是用来在每个区域放置中间容器的,

    即使用在面板嵌套设计当中。

    边界布局中间可以使用空布局

    3,流布局管理器---FlowLayout; this.consetLayout(new FlowLayout())

    特点:

    1、自动按照规则控制组件的位置和大小

    2、位置:从上往下、从左往右、由中间开始的方式依次排列组件

    3、大小:由组件内容确定

    4、我们常用的中间容器JPanel的默认布局管理器是FlowLayout。

    使用场景:

    1、一般专用于放置组件;

    2、最好是单行,依次放置的情况

    4,网格布局管理器---GridLayout;

    this.con.setLayout(new GridLayout(2,2));

    特点:

    1、把容器按行列划分为等大的几个区域;

    2、根据add的顺序决定组件放在哪个区域,

    先保证一行放满了,在放第二行;

    3、大小是自动填充整个网格;

    4、如果网格的数目和add的数目不一致,会保证行不变。

    适用场景:

    1、类似于边界布局,主要用来放置中间容器的;

    2、在划分等大的情况下使用

    5,卡片布局CardLayout;

    this.con.setLayout(new CardLayout());

    this.con.add(两个参,第一个数据,第二个是名字);

    1,卡片布局代码格式;

    CardLayout card = (CardLayout)frame.getUpP().getLayout();

    card.first(frame.getUpP());//到第一页

    card.previous(frame.getUpP());//上一页

    card.next(frame.getUpP());//下一页

    card.last(frame.getUpP());//到最后一页

    2,根据名字跳转

    CardLayout card = (CardLayout)TakeP.this.atm.getContentPane().getLayout();

    card.show( TakeP.this.atm.getContentPane(), "选择");

    3,组件 Compamet

    1,组件有;

    1,标签 JLabel

    2,文本框 JTextField

    3,密码框 JPasswordField

    4,单选框 JRadioButton

    5,复选框 JCheckBox

    6,按钮 JButton

    7,下拉列表 JComboBox

    8,文本域 JTextArea

    2,完成一个组件的放入分4步:

    1、new出组件对象;

    this.usernameLab = new JLabel();

    2、调整组件细节属性(这个动作可以最后边看效果边调整)

    this.usernameLab.setText("成都朗沃教育网站的用户名:");写入信息

    this.usernameLab.setFont(new Font("隶书",Font.ITALIC,20))

    设置标签字体大小,字体样式一般都有常量定义;

    this.usernameLab.setForeground(Color.BLUE);设置前景色

    this.usernameLab.setBorder(BorderFactory.createLineBorder(Color.BLACK));

    设置组件边框,和边框颜色,

    3、在空布局的情况下,必须自定义位置和大小

    this.usernameLab.setBounds(100, 5, 300, 30);

    设置组件的位置/大小,必须保证容器的布局管理器为空,这句代码才起作用。

    4、把组件添加到容器中

    this.con.add(this.usernameLab);//放入

    5,其他设置;

    this.pwdTxt.setEchoChar('*');设置密码框的字符

    this.xialaTab.setEditable(true);设置选择框可否直接输入

    ButtonGroup b =new ButtonGroup();在放入组件之前放入

    this.stateComb.setEnabled(false);设置禁用

    this.okBtn.setIcon(new ImageIcon("img/hp.JPG"));点击前的图片

    this.okBtn.setRolloverIcon(new ImageIcon("img/logo.gif"));点击后的图片

    JScrollPane sp = new JScrollPane(this.inputArea);设置文本框滚动条

    三,嵌套

    1,把复杂界面划分成多个简单页面进行组合

    2,面板嵌套,下面的页面集成JPanel面板

    四,事件;

    1,事件处理

    1,java采用了委托事件模型

    2,监听器对象绑定Gui对象。

    3,不同的事件类型有不同的监听器

    4,一个GUI对象身上可以绑定多个不同的监听器

    5,一个监听器也可以绑定多个GUI对象

    2,监听器的实现方法一

    1,书写一个单独的类来实现监听接口

    2,把要实现发生在事件后的要做的操作在相应的方法中实现

    3,产生一个监听器对象调用事件源listenet()来进行绑定。

    this.addBtn.addActionListener();

    4,可以书写一个监听器同时监听多个事件源对象,

    也可以为不同的事件源对象书写各自的监听对像

    5,根据单一职责推荐使用为不同的事件源书写各自的监听器

    6,如果要在响应过程中操作非事件源对象就需要将其传进来

    优点;

    可以满足单一职责;

    缺点;

    满足单一职责,会带来类的数量增加,如果要操作大量的非事件源对象就要大量传参

    3,监听器的实现方法二

    让容器类当监听器

    优点;

    没有单独的类,

    访问当前容器的任何一个非事件源都不用传参,

    缺点;

    违背了单一职责

    4,监听器的实现方法三

    在绑定监听器对象同时实现监听器接口(匿名内部类)

    优点;

    1,没有独立的java文件存在维护量不大

    2,只能为每个事件源书写独立的监听,满足了单一原则

    缺点;

    语法不太熟悉

     

    5,代码格式;

    this.zuoAnLiuJbu.addActionListener(new ActionListener() {

    @Override

    public void actionPerformed(ActionEvent e) {

    // TODO Auto-generated method stub

    YeMian a=(YeMian) ZhaoPian.this.fanYeyemian.getLayout();

    //获取YeMian对象

    }

    });

    String text=TestFrame1.this.usernameTxt.getText();//返回文本框的类容

    String text=TestFrame1.this.usernameTxt.setText();//写入如文本框

    TestFrame1.this.usernameTxt.setText(null);//将文本框设为空

    Testzuoye2.this.okBtn.setEnabled(false);//禁止按钮使用

    Testzuoye2.this.imageLab.setIcon(new ImageIcon("img/1.png"));

    //替换图片标签的图片

    Testzuoye2.this.okBtn1.setText("Again");//给按键更名

    代码笔记1

    public class TestFrame extends JFrame{

    private Container con;

    private JLabel usernameLab;//文字标签

    private JLabel imageLab;//图片标签

    private JTextField usernameTxt;//文本框

    private JPasswordField pwdTxt;//密码框

    private JButton okBtn;//按钮

    private JButton imageBtn;//图片按钮

    private JComboBox stateComb;//下拉框

    private JRadioButton maleRad;//单选框

    private JRadioButton femaleRad;

    private JCheckBox readChc;//复选框

    private JCheckBox movieChc;

    private JCheckBox musicChc;

    private JTextArea inputArea;//文本域(多行文本输入框)

    public TestFrame(){

    Toolkit tk = Toolkit.getDefaultToolkit();//工具箱类

    this.setSize(500, 300);//设置窗体大小

    this.setResizable(false);//设置窗体大小不可变

    this.setLocation(((int)tk.getScreenSize().getWidth()-500)/2,

    ((int)tk.getScreenSize().getHeight()-300)/2);//设置窗体位置

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭,程序即结束

    this.setTitle("我的第一个窗体");//设置标题

    this.setIconImage(tk.createImage("img/hp.JPG"));//设置图标

    this.addContent();

    this.setVisible(true);//设置窗体可见(放最后)

    }

    private void addContent(){

    this.con = this.getContentPane();//获取内容面板(JFrame自带)

    this.con.setBackground(Color.WHITE);//改变内容面板背景色(改JFrame背景没有效果)

    this.con.setLayout(null);//把容器自带的布局管理器设为空,使用空布局(绝对定位)

    //完成一个组件的放入分4步:

    //1、new出组件对象;

    this.usernameLab = new JLabel();

    //2、调整组件细节属性(这个动作可以最后边看效果边调整)

    this.usernameLab.setText("成都朗沃教育网站的用户名:");

    this.usernameLab.setFont(new Font("隶书",Font.ITALIC,20));

    this.usernameLab.setForeground(Color.BLUE);

    // this.usernameLab.setBorder(BorderFactory.createLineBorder(Color.BLACK));

    //3、在空布局的情况下,必须自定义位置和大小

    this.usernameLab.setBounds(100, 5, 300, 30);//设置组件的位置/大小,

    必须保证容器的布局管理器为空,这句代码才起作用。

    //4、把组件添加到容器中

    this.con.add(this.usernameLab);//放入

    this.imageLab = new JLabel();

    this.imageLab.setIcon(new ImageIcon("img/tx.JPG"));

    this.imageLab.setBounds(5, 30, 88, 86);

    this.con.add(this.imageLab);

    this.usernameTxt = new JTextField();

    this.usernameTxt.setFont(new Font("宋体",Font.PLAIN,30));

    this.usernameTxt.setBounds(100, 40, 200, 30);

    this.con.add(this.usernameTxt);

    this.pwdTxt = new JPasswordField();

    this.pwdTxt.setFont(new Font("宋体",Font.PLAIN,30));

    this.pwdTxt.setEchoChar('*');

    this.pwdTxt.setBounds(100, 80, 200, 30);

    this.con.add(this.pwdTxt);

    this.okBtn = new JButton("确定");

    this.okBtn.setIcon(new ImageIcon("img/hp.JPG"));

    this.okBtn.setRolloverIcon(new ImageIcon("img/logo.gif"));

    this.okBtn.setFont(new Font("宋体",Font.PLAIN,24));

    this.okBtn.setForeground(Color.GREEN);

    this.okBtn.setBounds(320, 40, 140, 30);

    this.con.add(this.okBtn);

    this.imageBtn = new JButton(new ImageIcon("img/buttonClear.jpg"));

    this.imageBtn.setBounds(320, 80, 140, 50);

    this.con.add(this.imageBtn);

    this.stateComb = new JComboBox(new String[]{"山东","河南","湖北"});

    this.stateComb.addItem("四川");

    this.stateComb.setEditable(true);//设置可编辑

    // this.stateComb.setEnabled(false);//设置禁用

    this.stateComb.setBounds(10, 150, 100, 30);

    this.con.add(this.stateComb);

    this.maleRad = new JRadioButton("男");

    this.femaleRad = new JRadioButton("女");

    ButtonGroup bg = new ButtonGroup();

    bg.add(this.maleRad);

    bg.add(this.femaleRad);

    this.maleRad.setSelected(true);

    this.maleRad.setBounds(10, 190, 50, 30);

    this.femaleRad.setBounds(100, 190, 50, 30);

    this.con.add(this.maleRad);

    this.con.add(this.femaleRad);

    this.readChc = new JCheckBox("阅读");

    this.movieChc = new JCheckBox("电影");

    this.musicChc = new JCheckBox("音乐");

    ButtonGroup bg0 = new ButtonGroup();

    bg0.add(this.readChc);

    bg0.add(this.movieChc);

    bg0.add(this.musicChc);

    this.movieChc.setSelected(true);

    this.readChc.setBounds(10, 220, 60, 30);

    this.movieChc.setBounds(80, 220, 60, 30);

    this.musicChc.setBounds(150, 220, 60, 30);

    this.con.add(this.readChc);

    this.con.add(this.movieChc);

    this.con.add(this.musicChc);

    //文本域默认不带外边框、滚动条

    this.inputArea = new JTextArea();

    JScrollPane sp = new JScrollPane(this.inputArea);

    sp.setBounds(220, 150, 270, 100);

    this.con.add(sp);

    }

    }

    lst.add("String");

    lst.add(new Date());

    lst.add(new StudentBean("小白", 25, 70));

    lst.add(250);//注意:这是自动封箱,放进去的是一个Integer对象。

    System.out.println(lst.size());//得到集合中元素个数

    3,删

    lst.remove(0);//根据下标进行删除

    lst.remove("String");//根据对象进行删除

    4,改

    lst.set(1, "SSSS");//根据下标完成修改

    5,查

    System.out.println(lst.get(0));//get方法默认返回的是Odject

    6,遍历---掌握1和2,认识3

    1、普通for循环

    for(int i = 0; i < lst.size(); i++){

    System.out.println(lst.get(i));

    }

    2for-each 循环---JDK1.5以后才有的功能

    for(Object obj : lst){

    System.out.println(obj);

    }

    3,迭代器---Iterator---以前主要用于没有下标的集合类完成遍历,现在被for-each替代

    数组不能用---只有集合能用

    Iterator it = lst.iterator();

    产生和集合对象相关联的迭代器对象

    while(it.hasNext()){

    Object obj = it.next();

    System.out.println(obj);

    }

    二,Set---集,不能存放重复元素;非线性,即无序,没有下标。

    1,特点;

    不能存放重复元素!以无序的方式存放!无下标

    掌握:HashSet

    1、提供了增、删除的行为,删除也只能按对象删除

    2、没有修改和查询指定元素的行为(因为没有下标)

    3、不接受普通for循环。

    2,set集合如何判断两个元素重复:

    1、它不是判断两个元素是否是同一个对象!

    2、而是先调用两个对象的hashcode方法,判断是否返回同一个值;

    然后再调用equals方法判断是否返回true;

    ----所以根据规范,重写equals方法,同时也要重写hashcode方法

    同样支持泛型

    HashSet<Integer> set = new HashSet<Integer>();

    HashSet set = new HashSet();

    3,增

    set.add("String");

    set.add(new Date());

    set.add(new StudentBean("小样儿", 18, 70));

    set.add(250);

    System.out.println(set.size());//获取元素个数

    set.add(new String("String"));//不能存放重复元素

    set.add(new StudentBean("小样儿", 18, 70));

    System.out.println(set.size());

    4,删---因为没有下标,所以只能根据对象来进行删除

    set.remove(new String("String"));

    System.out.println(set.size());

    5,改---没有提供修改某个指定元素的方法

    6,查---没有获取某个指定元素的方法

    7,遍历---不能用普通for

    1、for-each

    for(Object obj : set){

    System.out.println(obj);

    }

    2、迭代器

    Iterator it = set.iterator();

    while(it.hasNext()){

    System.out.println(it.next());

    }

    三,Map---映射---特点:以键值对的方式存放元素

    1,特点;

    不能存放重复元素,无序的方式存放!无下标,所有数据以key---Value的方式存放

    hashmap 常用

    2,掌握:HashMap的增删查改遍历的API。

    补充掌握:Properties操作文件的方法

    辨析:

    HashMap、Hashtable

    1、两者都是Map分支的实现类,拥有相同的API;

    2、Hashtable是线程安全的,效率低;HashMap是线程不安全的,效率高

    3、Hashtable不允许使用null做键或值,但是HashMap是允许的

    (所有键中只能有一个为null)

    HashMap<String, StudentBean> map = new HashMap<String, StudentBean>();

    Hashtable<String, StudentBean> map = new Hashtable<String, StudentBean>();

    3,增---必须保证键不一样

    map.put("J136001", new StudentBean("乾隆",24,80));

    map.put("J136002", new StudentBean("程骁",28,75));

    map.put(null, new StudentBean());

    map.put("J136004", null);

    System.out.println(map.size());//获取元素个数

    4,删---根据键进行删除,如果键不存在不会报异常只会删除失败

    map.remove("J136003");

    System.out.println(map.size());

    5,改---仍然调用put方法,修改传入键所对应的值

    map.put("J136002", new StudentBean("王超",32,70));

    System.out.println(map.size());

    6,查---根据键查找值

    StudentBean stu = map.get("J136002");

    7,遍历---不能直接遍历Map,只能单独遍历Map的所有键或者所有值

    所以在遍历前,要得到所有的键,或所有的值

    Set<String> keys = map.keySet();//得到所有的键

    Collection<StudentBean> values = map.values();//得到所有的值

    1、for-each

    for(String key : keys){

    System.out.println(key);

    }

    for(StudentBean tmpStu : values){

    System.out.println(tmpStu.getName());

    }

    2、Iterator

    Iterator<String> keyIt = keys.iterator();

    while(keyIt.hasNext()){

    System.out.println(keyIt.next());

    }

    Iterator<StudentBean> stuIt = values.iterator();

    while(stuIt.hasNext()){

    System.out.println(stuIt.next().getName());

    }

    8,Hashtable和HashMap的区别

    1,HashMap;

    线程不安全效率高

    可以用null做键和值

    2,Hashtable;

    线程安全效率低

    不可以用null做键和值

     

    五,泛型---限制集合只能存放某种元素的。

    HashMap<String, StudentBean> map = new HashMap<String, StudentBean>();

    <String, StudentBean>

    集合框架类的在默认情况下是可以操作任意数据类型的(Object),这本来是

    集合要解决的数组三大问题之一。但是在实际操作中,往往我们会把相同数据类型

    放到一起做统一处理。----泛型就是用来限制某个集合对象,只能存放某种类型

    的元素。

    六,拼接接口Comparable从写里边的方法设定排序

    当第1个对象根据排序规则所决定的位置 小于 第2个对象根据规则所决定的位置,返回-1

    当第1个对象根据排序规则所决定的位置 大于 第2个对象根据规则所决定的位置,返回1

    当第1个对象根据排序规则所决定的位置 和 第2个对象根据规则所决定的位置 保持相等,返回0

    collections是工具类

    int max = Collections.max(lst);

    int min = Collections.min(lst);

    System.out.println("最大值:" + max);

    System.out.println("最小值:" + min);

    Collections.sort(lst);//自动按照自然排序(即元素类型自带的内部比较规则)进行排列

    Collections.reverse(lst);//对List集合元素进行反转

    Collections.shuffle(lst);//混排---随机排序

    @Override

    public int compare(StudentBean stu1, StudentBean stu2) {

    if(stu1.getScore() > stu2.getScore()){

    return -1;

    }else if(stu1.getScore() < stu2.getScore()){

    return 1;

    }else{

    if(stu1.getAge() < stu2.getAge()){

    return -1;

    }else if(stu1.getAge() > stu2.getAge()){

    return 1;

    }else{

    return 0;

    }

    }

    七,其他

    1,float c=Float.parseFloat(values[2]);字符串转flot

     

  • 相关阅读:
    【1801視聴説2宿題】中国のリサイクル事情やごみの分別事情に対する意見
    【1701日本語新聞編集】第2回3月6日
    【1701新聞編集宿題】興味のあるネットニュース
    【1801日語写作】第2回:3月5日
    【1801日語听解4】第2回:3月3日
    【1801日本語新聞選読】第2回:3月3日
    不解压查看tar.gz包内文件
    设计模式——适配器模式
    ubuntu安装jre
    设计模式——抽象工厂模式
  • 原文地址:https://www.cnblogs.com/zpcbk/p/6487085.html
Copyright © 2020-2023  润新知