第二十五天    399

1:如何让Netbeans的东西Eclipse能访问。    399

2:GUI(了解)    399

(1)用户图形界面    399

(2)两个包:    399

(3)主要方法:    399

A:javax.swing包下的方法    399

B:监听机制的应用    400

(4)GUI的继承体系    400

(5)事件监听机制(理解)    401

(6)适配器模式(理解)    401

案例解释    401

1. UserDao(顶层接口)    401

2. UserAdapter(适配器类,实现顶层接口)    401

3. UserDaoImpl(具体实现类,需继承UserAdapter适配器类)    402

(7)案例:    402

A:创建窗体案例    402

B:窗体关闭案例    403

C:窗体添加按钮并对按钮添加事件案例。    404

界面中的组件布局。    404

D:把文本框里面的数据转移到文本域    405

E:更改背景色    407

F:设置文本框里面不能输入非数字字符    409

G:一级菜单    410

H:多级菜单    411

(8)Netbeans的概述和使用    414

 

第二十五天

1:如何让Netbeans的东西Eclipse能访问。

    在Eclipse中创建项目,把Netbeans项目的src下的东西给拿过来即可。

    注意:修改项目编码为UTF-8

    

2:GUI(了解)
    (1)用户图形界面

        GUI:方便直观

        CLI:需要记忆一下命令,麻烦

    (2)两个包:

        java.awt:和系统关联较强(重量级)

        javax.swing:纯Java编写(轻量级)

    (3)主要方法:

        A:javax.swing包下的方法    

 

            构造方法:

            public JFrame(String title):创建对象的同时,设置标题名称

            public JFrame():无参构造

 

            普通方法:

            public
void setTitle(String title):设置窗体的标题

            public
void setSize(int
width, int
height):设置窗体的大小

public
void setSize(Dimension d):通过传入Dimension对象设置窗体大小

            public Dimension(int
width, int
height):Dimension类的构造方法

            public
void setLocation(int
x, int
y):设置窗体的坐标

public
void setLocation(Point p):通过传入一个Point对象,来设置窗体坐标

public Point(int
x, int
y):Point类的构造方法

            public
void setVisible(boolean
b):设置让窗体可见

 

            用一个方法完成窗体大小和坐标的设置

            public
void setBounds(int
x, int
y, int
width, int
height):

            参数x、y设置窗体坐标。Width、height设置窗体大小

 

            public
void setLayout(LayoutManager mgr):设置窗体的布局模式

                        常用的为流式布局:FlowLayout

 

        B:监听机制的应用

            案例:关闭窗体

            

import java.awt.Frame;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

 

public class FrameDemo {

    public static void main(String[] args) {

        // 创建窗体对象

        JFrame f = new JFrame("窗体关闭案例");

 

        // 设置窗体属性

        f.setBounds(400, 200, 400, 300);

 

        //用适配器类改进

        f.addWindowListener(new WindowAdapter() {

            @Override

            public void windowClosing(WindowEvent e) {

                System.exit(0);

            }

        });

 

        // 设置窗体可见

        f.setVisible(true);

    }

}

 

    (4)GUI的继承体系

        组件:组件就是对象

            容器组件:是可以存储基本组件和容器组件的组件。

            基本组件:是可以使用的组件,但是必须依赖容器。

    (5)事件监听机制(理解)

        A:事件源

        B:事件

        C:事件处理

        D:事件监听

    (6)适配器模式(理解)

        应用场景:当一个接口中有蛮多方法的时候,而我们只需要用其中某一个方法,但是呢?

                用其中的一个方法,就要实现该接口中的所有方法,有点不划算,所以呢?

                适配器模式就应运而生啦

        A:接口

                定义一个顶层的接口

        B:抽象适配器类

                用一个抽象类实现该接口,当然是空实现(不提供具体的方法体)

        C:实现类

            用具体的类继承抽象适配器类,想用哪个方法,就重写哪个方法,不用重写所有方法

        案例解释

            1. UserDao(顶层接口)

/*

* 顶层接口:针对用户操作的四种功能

*/

public interface UserDao {

    public abstract void add();

 

    public abstract void delete();

 

    public abstract void update();

 

    public abstract void find();

}

 

            2. UserAdapter(适配器类,实现顶层接口)

/*

* 定义一个类实现UserDao接口:当然啦,是空实现

*/

public abstract class UserAdapter implements UserDao {

 

    @Override

    public void add() {

    }

 

    @Override

    public void delete() {

    }

 

    @Override

    public void update() {

    }

 

    @Override

    public void find() {

    }

}

 

            3. UserDaoImpl(具体实现类,需继承UserAdapter适配器类)

/*

* 具体实现类:继承UserAdapter适配器类,重写里面

*             自己想要使用的方法

*/

public class UserDaoImpl extends UserAdapter {

    @Override

    public void add() {

        System.out.println("添加功能");

    }

}

 

            4. UserDaoDemo(测试类)

/*

* 问题:

*         接口(方法比较多) -- 实现类(仅仅使用一个,也得把其他的实现给提供了,哪怕是空实现)

*         太麻烦了。

* 解决方案:

*         接口(方法比较多) -- 适配器类(实现接口,仅仅空实现) -- 实现类(用哪个重写哪个)

*/

public class UserDaoDemo {

    public static void main(String[] args) {

        UserDao ud = new UserDaoImpl();

        ud.add();

        // 我没有说我们需要四种功能都实现啊。

        UserDao ud2 = new UserDaoImpl2();

        ud2.add();

    }

}

 

    

    (7)案例:

        A:创建窗体案例

import javax.swing.JFrame;

/*

* 需求:创建一个窗体(该窗体默认情况下是不能关闭的)

*/

public class FrameDemo {

    public static void main(String[] args) {

        // 创建窗体对象

        // Frame f = new Frame();

        // Frame(String title)

        JFrame f = new JFrame("林青霞");

 

        // 设置窗体标题

        f.setTitle("HelloWorld");

        // 设置窗体大小

        f.setSize(400, 300); // 单位:像素

        // 设置窗体位置

        f.setLocation(400, 200);

 

        // 调用一个方法,设置让窗体可见

        // f.show();

        f.setVisible(true);

 

        // System.out.println("helloworld");

    }

}

 

        B:窗体关闭案例

        

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JFrame;

/*

* 需求:创建一个窗体(该窗体可以直接被关闭的)

*/

public class FrameDemo {

    public static void main(String[] args) {

        // 创建窗体对象

        JFrame f = new JFrame("窗体关闭案例");

 

        // 设置窗体属性

        f.setBounds(400, 200, 400, 300);

        

        //用适配器类改进,为窗体添加监听机制

        f.addWindowListener(new WindowAdapter() {

            @Override

            public void windowClosing(WindowEvent e) {

                System.exit(0);

            }

        });

 

        // 设置窗体可见

        f.setVisible(true);

    }

}

 

        C:窗体添加按钮并对按钮添加事件案例。

            界面中的组件布局。

import java.awt.Button;

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

 

import javax.swing.JFrame;

 

/*

* 需求:把按钮添加到窗体,并对按钮添加一个点击事件。

* A:创建窗体对象

* B:创建按钮对象

* C:把按钮添加到窗体

* D:窗体显示

*/

public class FrameDemo {

    public static void main(String[] args) {

        // 创建窗体对象

        JFrame f = new JFrame("添加按钮");

        // 设置属性

        f.setBounds(400, 200, 400, 300);

        // 设置布局为流式布局

        f.setLayout(new FlowLayout());

 

        // 创建按钮对象

        Button bu = new Button("点我啊");

        // bu.setSize(20, 10);

 

        // 把按钮添加到窗体

        f.add(bu);

 

        // 设置窗体可以关闭

        f.addWindowListener(new WindowAdapter() {

            @Override

            public void windowClosing(WindowEvent e) {

                System.exit(0);

            }

        });

 

        bu.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                System.out.println("你再点试试");

            }

        });

 

        // 窗体显示

        f.setVisible(true);

    }

}

 

        D:把文本框里面的数据转移到文本域

import java.awt.Button;

import java.awt.FlowLayout;

import java.awt.TextArea;

import java.awt.TextField;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

 

import javax.swing.JFrame;

/*

* 需求:将文本框中的数据转移到文本域中

*/

public class FrameDemo {

    public static void main(String[] args) {

        // 创建窗体对象

        JFrame f = new JFrame("数据转移");

        // 设置窗体属性和布局

        f.setBounds(400, 200, 400, 300);

        f.setLayout(new FlowLayout());

 

        // 创建文本框

        final TextField tf = new TextField(20);

        // 创建按钮

        Button bu = new Button("数据转移");

        // 创建文本域

        final TextArea ta = new TextArea(10, 40);

 

        // 把组件添加到窗体

        f.add(tf);

        f.add(bu);

        f.add(ta);

 

        // 设置窗体关闭

        f.addWindowListener(new WindowAdapter() {

            @Override

            public void windowClosing(WindowEvent e) {

                System.exit(0);

            }

        });

 

        // 对按钮添加事件

        bu.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                // 获取文本框的值

                String tf_str = tf.getText().trim();

                // 清空数据

                tf.setText("");

 

                // 设置给文本域

                // ta.setText(tf_str);

                // 追加和换行

                ta.append(tf_str + "\r\n");

                

                //获取光标

                tf.requestFocus();

            }

        });

 

        // 设置窗体显示

        f.setVisible(true);

    }

}

 

        E:更改背景色

import java.awt.Button;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.Frame;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

/*

* 需求:更改背景色

*/

public class FrameDemo {

    public static void main(String[] args) {

        // 创建窗体对象,局部内部类访问局部变量,局部变量必须用final修饰

        final Frame f = new Frame("更改背景色");

        // 设置窗体属性和布局

        f.setBounds(400, 200, 400, 300);

        f.setLayout(new FlowLayout());

 

        // 创建四个按钮

        Button redButton = new Button("红色");

        Button greenButton = new Button("绿色");

        Button buleButton = new Button("蓝色");

 

        // 添加按钮

        f.add(redButton);

        f.add(greenButton);

        f.add(buleButton);

 

        // 设置窗体关闭

        f.addWindowListener(new WindowAdapter() {

            @Override

            public void windowClosing(WindowEvent e) {

                System.exit(0);

            }

        });

 

        // 对按钮添加动作事件

        // redButton.addActionListener(new ActionListener() {

        // @Override

        // public void actionPerformed(ActionEvent e) {

        // f.setBackground(Color.RED);

        // }

        // });

 

        // 对按钮添加鼠标点击事件

        // redButton.addMouseListener(new MouseAdapter() {

        // @Override

        // public void mouseClicked(MouseEvent e) {

        // f.setBackground(Color.RED);

        // }

        // });

 

        // 对按钮添加鼠标的进入事件

        redButton.addMouseListener(new MouseAdapter() {

            @Override

            public void mouseEntered(MouseEvent e) {

                f.setBackground(Color.RED);

            }

        });

        // 对按钮添加鼠标的离开事件

        redButton.addMouseListener(new MouseAdapter() {

            @Override

            public void mouseExited(MouseEvent e) {

                f.setBackground(Color.WHITE);

            }

        });

 

        greenButton.addMouseListener(new MouseAdapter() {

            @Override

            public void mouseEntered(MouseEvent e) {

                f.setBackground(Color.GREEN);

            }

        });

 

        greenButton.addMouseListener(new MouseAdapter() {

            @Override

            public void mouseExited(MouseEvent e) {

                f.setBackground(Color.WHITE);

            }

        });

 

        buleButton.addMouseListener(new MouseAdapter() {

            @Override

            public void mouseEntered(MouseEvent e) {

                f.setBackground(Color.BLUE);

            }

        });

 

        buleButton.addMouseListener(new MouseAdapter() {

            @Override

            public void mouseExited(MouseEvent e) {

                f.setBackground(Color.WHITE);

            }

        });

 

        // 设置窗体显示

        f.setVisible(true);

    }

}

 

        F:设置文本框里面不能输入非数字字符

import java.awt.FlowLayout;

import java.awt.Frame;

import java.awt.Label;

import java.awt.TextField;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

 

/*

* 需求:你输入的如果是非数字字符,就取消你键盘录入的效果。

*/

public class FrameDemo {

    public static void main(String[] args) {

        // 创建窗体对象并设置属性

        Frame f = new Frame("不能输入非数字字符");

        f.setBounds(400, 200, 400, 300);

        f.setLayout(new FlowLayout());

 

        // 创建Label标签对象

        Label label = new Label("请输入你的QQ号码,不能是非数字,不信你试试");

        TextField tf = new TextField(40);

 

        // 添加到窗体上

        f.add(label);

        f.add(tf);

 

        // 设置窗体关闭

        f.addWindowListener(new WindowAdapter() {

            @Override

            public void windowClosing(WindowEvent e) {

                System.exit(0);

            }

        });

 

        // 给文本框添加事件

        tf.addKeyListener(new KeyAdapter() {

            @Override

            public void keyPressed(KeyEvent e) {

                // 如果你取得的字符不是数字字符就取消事件

                // 思路:先获取字符,判断字符,取消事件

                // char getKeyChar()

                char ch = e.getKeyChar();

                // System.out.println(ch);

                if (!(ch >= '0' && ch <= '9')) {

                    e.consume();

                }

            }

        });

 

        // 设置窗体可见

        f.setVisible(true);

    }

}

 

        G:一级菜单

import java.awt.FlowLayout;

import java.awt.Frame;

import java.awt.Menu;

import java.awt.MenuBar;

import java.awt.MenuItem;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

 

/*

* 需求:制作一级菜单

*/

public class FrameDemo {

    public static void main(String[] args) {

        // 创建窗体对象并设置属性

        Frame f = new Frame("一级菜单");

        f.setBounds(400, 200, 400, 300);

        f.setLayout(new FlowLayout());

 

        // 创建菜单栏

        MenuBar mb = new MenuBar();

        // 创建菜单

        Menu m = new Menu("文件");

        // 创建菜单项

        MenuItem mi = new MenuItem("退出系统");

 

        // 谁添加谁呢

        m.add(mi);

        mb.add(m);

 

        // 设置菜单栏

        f.setMenuBar(mb);

 

        // 设置窗体关闭

        f.addWindowListener(new WindowAdapter() {

            @Override

            public void windowClosing(WindowEvent e) {

                System.exit(0);

            }

        });

 

        mi.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                System.exit(0);

            }

        });

 

        // 设置窗体可见

        f.setVisible(true);

    }

}

 

        H:多级菜单

import java.awt.FlowLayout;

import java.awt.Frame;

import java.awt.Menu;

import java.awt.MenuBar;

import java.awt.MenuItem;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.IOException;

 

/*

* 需求:制作多级菜单

*/

public class FrameDemo {

    public static void main(String[] args) {

        // 创建窗体对象并设置属性

        final Frame f = new Frame("多级菜单");

        f.setBounds(400, 200, 400, 300);

        f.setLayout(new FlowLayout());

        

        final String name = f.getTitle();

 

        // 创建菜单栏

        MenuBar mb = new MenuBar();

        // 创建菜单

        Menu m1 = new Menu("文件");

        Menu m2 = new Menu("更改名称");

        // 创建菜单项

        final MenuItem mi1 = new MenuItem("好好学习");

        final MenuItem mi2 = new MenuItem("天天向上");

        MenuItem mi3 = new MenuItem("恢复标题");

        MenuItem mi4 = new MenuItem("打开记事本");

        MenuItem mi5 = new MenuItem("退出系统");

 

        // 谁添加谁呢

        m2.add(mi1);

        m2.add(mi2);

        m2.add(mi3);

        

        m1.add(m2);

        m1.add(mi4);

        m1.add(mi5);

        

        mb.add(m1);

 

        // 设置菜单栏

        f.setMenuBar(mb);

 

        // 设置窗体关闭

        f.addWindowListener(new WindowAdapter() {

            @Override

            public void windowClosing(WindowEvent e) {

                System.exit(0);

            }

        });

        

        mi1.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                f.setTitle(mi1.getLabel());

            }

        });

        

        mi2.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                f.setTitle(mi2.getLabel());

            }

        });

        

        mi3.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                f.setTitle(name);

            }

        });

        

        mi4.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                Runtime r = Runtime.getRuntime();

                try {

                    r.exec("notepad");

                } catch (IOException e1) {

                    e1.printStackTrace();

                }

            }

        });

 

        mi5.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                System.exit(0);

            }

        });

 

        // 设置窗体可见

        f.setVisible(true);

    }

}

 

    (8)Netbeans的概述和使用

        A:是可以做Java开发的另一个IDE工具,做GUI界面开发特别方便。

        B:使用

            A:四则运算

                a:修改图标        b:设置皮肤

                c:设置居中        d:数据校验

            B:登录注册

 

javaSE第二十五天的更多相关文章

  1. NeHe OpenGL教程 第二十五课:变形

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. Gradle 1.12用户指南翻译——第二十五章. Scala 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  3. SQL注入之Sqli-labs系列第二十五关(过滤 OR & AND)和第二十五A关(过滤逻辑运算符注释符)

    开始挑战第二十五关(Trick with OR & AND) 第二十五关A(Trick with comments) 0x1先查看源码 (1)这里的or和and采用了i正则匹配,大小写都无法绕 ...

  4. “全栈2019”Java多线程第二十五章:生产者与消费者线程详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  5. centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课

    centos  lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress  安装phpmyadmin  定时备份mysql两种方法  第二十五节 ...

  6. “全栈2019”Java第二十五章:流程控制语句中循环语句while

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. 孤荷凌寒自学python第二十五天初识python的time模块

    孤荷凌寒自学python第二十五天python的time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 通过对time模块添加引用,就可以使用python的time模块来进行相关的时间操 ...

  8. 风炫安全WEB安全学习第二十五节课 利用XSS键盘记录

    风炫安全WEB安全学习第二十五节课 利用XSS键盘记录 XSS键盘记录 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源.所以xyz.com下的js脚本采用a ...

  9. 第二十五个知识点:使用特殊的素数定义$GF(p)$和$GF(2^n)$的方法。

    第二十五个知识点:使用特殊的素数定义\(GF(p)\)和\(GF(2^n)\)的方法. 在我们之前看到的博客中,当实现密码学方案时,一个最频繁调用的操作就是模运算.不幸的是,尽管模块化的使用非常广泛, ...

随机推荐

  1. JAVA关系运算符

    常用的关系运算符: 编号 关系运算符 说明 1 > 大于 2 < 小于 3 == 等于 4 != 不等于 5 >= 大于或等于 6 <= 小于或等于 用关系运算符判断后返回的值 ...

  2. Linux下SVN服务器安装配置及客户端安装说明

    原文地址:http://wenku.baidu.com/link?url=h3dVAMx4azpOXEND5HQEE6nliE8-zc0GSQ03yv4cUs1vXMALXF64UsK7kT7kXm_ ...

  3. UIView阴影和圆角的关系

    UIView阴影和圆角的关系   UIView 的 clipsToBounds属性和CALayer的setMasksToBounds属性表达的意思是一致的. 取值:BOOL(YES/NO) 作用:决定 ...

  4. Microsoft visual studio中文字样输出

    解决办法: 可以尝试下通过: 1.file->高级保存选项-> 2.工具->选项->文本编辑器->自动检测不带签名的UTF-8编码

  5. turing 项目引用

    1.友盟自动更新 2.友盟统计 3.友盟消息推送 http://www.bejson.com/json2javapojo/ 引用bejson 解析JSON生成类,数组 private List< ...

  6. jquery.cookie.js 配置

    一定要写入cookies路径 一个轻量级的cookie 插件,可以读取.写入.删除 cookie. jquery.cookie.js 的配置 首先包含jQuery的库文件,在后面包含 jquery.c ...

  7. C++primer 练习13.44

    13.44:编写标准库string类的简化版本,命名为String.你的类应该至少有一个默认构造函数和一个接受C 风格字符串指针参数的构造函数.使用allocator为你的String类分配所需内存 ...

  8. sencha touch 开发准备

    这是本人第一次写博客教程,没什么经验,文笔也不是很好,写这教程一方面为了巩固自己这段时间的学习成果,一方面帮助大家解决问题,欢迎大家多提建议,指出问题.接下来我们就开始我们的sencha touch开 ...

  9. php 获取图片主要颜色的方法

    本文章向码农们介绍php 获取图片主要颜色的方法,主要涉及php针对图片的相关操作技巧,需要的码农可以参考一下. $i = imagecreatefromjpeg("image.jpg&qu ...

  10. FPS学习记录

    最近在网上查了一些FPS的相关知识,在此和大家一起分享.FPS(Frames Per Second):每秒传输帧数,它是图像领域中的一个术语. Frames Per Second更确切的解释是“每秒中 ...