第二十五天    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. 何时要打开stm32的AFIO时钟

    STM32的管脚配置一般有2个:Default和rinmap,如果使用default就不需要打开AFIO,否则使用后者就需要打开3个时钟:GPIO时钟.外设功能时钟和AFIO时钟. 一般在涉及外中断配 ...

  2. centos7 安装中文编码

    运行如下 yum groups mark install "Chinese Support"

  3. Spring中依赖注入的使用和配置

    使用方法1: //在执行此实例化的时候就会完成所有注入 ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext( ...

  4. 立体匹配:关于理解middlebury提供的立体匹配代码后的精减

    Middlebury立体匹配源码总结 优化方法 图像可否预处理 代价计算可否采用BT方式 可选代价计算方法 可否代价聚合 可否MinFilter优化原始代价 WTA-Box 可以 可以 AD/SD 可 ...

  5. 光流算法:关于OpenCV读写middlebury网站给定的光流的代码

    Middlebury是每个研究光流算法的人不可能不使用的网站,Middlebury提供了许多标准的测试库,这极大地推进了光流算法的进展.Middlebury提供的标准库,其计算出的光流保存在后缀名为. ...

  6. [SQL]动态sql语句基本语法

    动态sql语句基本语法 :普通SQL语句可以用Exec执行 eg: Select * from tableName Exec('select * from tableName') Exec sp_ex ...

  7. poj 3080 Blue Jeans

    点击打开链接 Blue Jeans Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10243   Accepted: 434 ...

  8. spring获取bean的时候严格区分大小写

    如题:spring获取bean的时候严格区分大小写 配置文件helloservice.xml中配置: <dubbo:reference id="IInsurance" int ...

  9. html+css源码之实现登录弹出框遮罩层效果

    在web开发中,很多网站都做了一些特别炫丽的效果,比如用户登录弹框遮罩层效果,本文章向大家介绍css如何实现登录弹出框遮罩层效果,需要的朋友可以参考一下本文章的源代码. html+css实现登录弹出框 ...

  10. The Ninth Hunan Collegiate Programming Contest (2013) Problem L

    Problem L Last Blood In many programming contests, special prizes are given to teams who solved a pa ...