java学习第二十三天之GUI

GUI

package cn.myframe.demo;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class FrameDemo {
    /**
    * @param args
    * 需求:想要点击按钮有鲜果,比如打印一句话
    * 思路:
    *   确定事件源:按钮
    *   确定监听器。按钮添加监听器,按钮对象组清楚。到按钮对象中查找
    *   定义处理模式
    *   
    *定义规范:XXXListener:XXX监听器 --对应的XXXEvent事件
    *
    *在按钮上添加所需的监听器
    *
    *需求:想要实现点击窗体X就可以实现窗体的关闭
    *思路:
    *   事件源:窗体
    *   监听器:通过窗口对象去查
    *   事件处理
    *   
    *到底哪些监听接口有适配器类啊?
    *只要监听接口中的方法在2个以内,都没有适配器类。适配器的出现只为方便创建监听器对象
    *
    *但是一般监听接口都有适配器
    */
    public static void main(String[] args) {
//      创建一个窗体
        Frame frame=new Frame("My Frame");
        //设置窗体
        createFrame(frame);
//      给窗体添加按钮组件
        createButton(frame);
//      给窗体添加文本框组件
        createTextBox(frame);
//      关闭窗体
        closeFrame(frame);

        System.out.println("over");
    }

    /**
     * @param frame
     */
    private static void createTextBox(Frame frame) {
        /**
         * 
         */
//      加入一个文本框组件
        TextField textField=new TextField(40);
//      将组件添加到窗体中
        frame.add(textField);//要注意添加的顺序
        textField.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {
        /*      
//              如何获取录入的内容,通过键盘事件对象获取
                char key=e.getKeyChar();
                int code=e.getKeyCode();
                System.out.println(key+":"+code+KeyEvent.getKeyText(code));
            */
            /*  
                int code=e.getKeyCode();
                if(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9){
                    System.out.println("必须是0-9的数字");
                    e.consume();//直接取消默认处理方式
                }
            */  
                if(e.getKeyCode()==KeyEvent.VK_ENTER){
                    System.out.println("enter run!");
                }
                if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER){
                    System.out.println("ctrl+enter run");
                }
            }

        });
    }

    /**
     * @param frame
     */
    private static void closeFrame(Frame frame) {
        /*
        frame.addWindowListener(new WindowListener() {

            @Override
            public void windowOpened(WindowEvent arg0) {
            }

            @Override
            public void windowIconified(WindowEvent arg0) {
            }

            @Override
            public void windowDeiconified(WindowEvent arg0) {
            }

            @Override
            public void windowDeactivated(WindowEvent arg0) {
            }

            @Override
            public void windowClosing(WindowEvent arg0) {
                System.out.println("Closing");
                System.exit(0);
            }

            @Override
            public void windowClosed(WindowEvent arg0) {
            }

            @Override
            public void windowActivated(WindowEvent arg0) {
            }
        });
    */  
//      另一种快捷方法
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent arg0) {
                System.out.println("Closing");
                System.exit(0);
            }

            @Override
            public void windowOpened(WindowEvent e) {
                System.out.println("孔雀开屏");
            }

        });
    }

    /**
     * @param frame
     */
    private static void createButton(Frame frame) {
        Button button=new Button("MyButton");
//      button.setSize(20, 20);

//      将组件添加到窗体中
        frame.add(button);

        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("按钮被触发了"+e);//触发处理事件
//              System.exit(0);//退出程序
                for (int i = 0; i < 4; i++) {
                    for (int j = 0; j < 5; j++) {
                        System.out.print("*");
                    }
                    System.out.println();

                }
            }
        });
        /*  
        演示鼠标监听
        按钮事件源
        鼠标监听器注册到按钮上
        组件 .addXXXListener(new XXXAdapter){

        }
    */
        button.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
//              想要对鼠标双击进行处理,应该找鼠标事件对象。因为事件对象一产生,内部必然封装事件源以及事件相关内容
//              要查MouseEvent
                if(e.getClickCount()==2){
                    System.out.println("mouse click");  
                }
            }

        });
    }

    /**
     * 
     */
    private static void createFrame(Frame frame) {
        frame.setVisible(true);//设置窗体可见
//      对窗体进行基本设置
        frame.setSize(500,400);//width:500,height:400
        frame.setLocation(400, 500);//pageX  pageY

//      设置布局
        frame.setLayout(new FlowLayout());//创建流式布局    让下面的button自适应大小

    }
}
package cn.myframe.demo;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.io.File;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import javax.swing.JScrollPane;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class MyFrame extends JFrame {

    private JPanel contentPane;
    private JTextField textField1;
    private JScrollPane scrollPane;
    private JTextField textField;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MyFrame frame = new MyFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public MyFrame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 749, 466);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);

        JButton btnNewButton1 = new JButton("开始");
        btnNewButton1.setBounds(550, 40, 82, 51);
        btnNewButton1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            /*  
                通过在文本框输入具体的目录。将目录中的当前文件或者文件夹的名称列出到文本框中
                思路:
                    获取文本框中的路径
                    将路径封装成File对象,list();
                    将list()列表中的内容展现在文本区域中

                方法:
                    1、获取路径。通过文本框对象完成
                    String str_dir=textField.getText();

                    2、


            */  
                showDirs();
            }

            public void showDirs() {
//              1、获取路径。通过文本框对象完成
                String str_dir=textField1.getText();

//              2、将字符串路径封装成对象
                File dir=new File(str_dir);
//              判断
                if(dir.exists() && dir.isDirectory()){
//                  清空文本区域
                    textField.setText("");
//                  获取文件名称列表
                    String[] names=dir.list();
                    System.out.println("next:"+names);
                    for(String name:names){

//                      textField.append();
//                      将名字显示到文本区域中
                        textField.setText(name);
                    }
                }
                System.out.println(str_dir);
            }

        });
        contentPane.setLayout(null);
        contentPane.add(btnNewButton1);

        textField1 = new JTextField();//显示框
        textField1.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                    if(e.getKeyCode()==KeyEvent.VK_ENTER){
                        System.out.println(e+"谁知道哪儿不对!");
                    }
            }


        });
        textField1.setBounds(58, 40, 419, 51);
        contentPane.add(textField1);
        textField1.setColumns(10);

        scrollPane = new JScrollPane();
        scrollPane.setBounds(47, 101, 574, 317);
        contentPane.add(scrollPane);

        textField = new JTextField();//输入框
        textField.setText("  ");
        scrollPane.setViewportView(textField);
        textField.setColumns(10);
    }
}
package cn.myframe.demo;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.JToolBar;
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ContainerAdapter;
import java.awt.event.ContainerEvent;

public class MyMenu extends JFrame {
    private JTextField textField1;
    private JScrollPane scrollPane;
    private JTextField textField;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MyMenu frame = new MyMenu();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public MyMenu() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 749, 466);
        JPanel contentPane = new JPanel();

        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        getContentPane().setLayout(null);

        JMenuBar menuBar = new JMenuBar();
        menuBar.setBackground(Color.RED);
        setJMenuBar(menuBar);

        JMenu menu = new JMenu("文件");
        menu.setBackground(Color.DARK_GRAY);
        menuBar.add(menu);

        JMenu menu_1 = new JMenu("打开菜单项");
        menu.add(menu_1);

        JMenu menu_2 = new JMenu("哈哈哈");
        menu.add(menu_2);

        JMenu menu_3 = new JMenu("关闭文件");
        menu_3.addActionListener(new ActionListener() {         
            public void actionPerformed(ActionEvent e) {

                System.exit(0);
            }
        });
        menu.add(menu_3);
    }
}

正则表达式

package cn.myframe.demo;

import java.util.Arrays;

public class ResTest1 {
    /**
    * @param args
    * 我我我...... 要要.........吃吃吃吃.........饭饭饭
    */
    public static void main(String[] args) {
//      replaceDemo();

//      对IP地址进行排序
        OrderDemo();
        checkMail();
    }

    /**
     * 
     */
    private static void checkMail() {
        String mail="278663275@qq.com";
        String regex="\\w+@[a-zA-Z0-9]+(\\.[a-zA-Z]{2,3})";
        boolean b=mail.matches(regex);
        System.out.println(mail+":"+b);
    }

    /**
     * 
     */
    private static void OrderDemo() {
//      校验邮件地址
        String temp="192.168.1.37  1.2.3.4    10.25.6.6   127.0.0.1";
        String[] ips=temp.split(" +");
        /*
        排序出现问题了。是按照字符串字典顺序拍的序
        问题出在哪儿呢?是因为每一个地址段的位数不对
        如果位数都是三位就可以了。只有补0了
        每一位段数都不同,怎么补?
        干脆,按照最大所需的0的个数补齐,每一段都补两个0

        for(String ip: ips){
            System.out.println(ip);
        }*/
        temp=temp.replaceAll("(\\d+)", "00$1");

//      保留最后三位
        temp=temp.replaceAll("0*(\\d{3})","$1");
        Arrays.sort(ips);
        for(String ip: ips){
            System.out.println(ip);
        }
    }

    /**
     * 
     */
    private static void replaceDemo() {

        String pharse="我我我...... 要要.........吃吃吃吃.........饭饭饭";
//      明确要使用替换 replaceAll()
//      将点去掉
        pharse=pharse.replaceAll("\\.+", "");

//      将叠词去掉
        pharse=pharse.replaceAll("(.)\\1+", "$1");

//      将空格去掉
        pharse=pharse.replaceAll(" ", "");
        System.out.println(pharse);
    }
}
package cn.myframe.demo;


public class ResDemo1 {
    /**
    * @param args
    * 正则表达式:正确的规则
    * 规则是由符号组成的
    * 
    * 专门用于对字符串的操作
    *   1、匹配
    *       String 类中提供了匹配 boolean matches(Res)的方法
    *   2、切割
    *   3、替换
    *   4、获取
    */
    public static void main(String[] args) {
        String QQ="02275455";
    /*  
        boolean b=checkQQ(QQ);
        if(b){
            System.out.println(QQ+"\tOK");
        }else {
            System.out.println(QQ+"\ttry again");
        }
    */  
        boolean b=QQ.matches("[1-9][0-9]{4,14}");//第一个数字的范围是1-9,后面的4-14位是0-9
//      System.out.println(QQ+":"+b);


        String temp="aaaaaa1";
        boolean res=temp.matches("a\\d{3,}");// \d匹配一次或者一次也没有 \d?匹配多次  \d{5}出现5次a  \d{5,}至少5次  \d{5,7}  5-7次
        System.out.println(temp+"\t"+res);
    }

    public static boolean checkQQ(String QQ) {
        boolean b=false;
        int len=QQ.length();//获取长度
        if(len>=5 && len<=15){
            //判断是否以0开头
            if(!QQ.startsWith("0")){
                try {
                    long qq_num=Long.parseLong(QQ);
                    System.out.println("QQ"+QQ);
                    b=true;
                } catch (Exception e) {
                    System.out.println("非法");
                }

            }
        }else {
            System.out.println("长度错误!");
        }
        return b;
    }
}
package cn.myframe.demo;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {
    /**
    * @param args
    */
    public static void main(String[] args) {
//      matchesDemo();
//      splitDemo();
//      replaceDemo();
        getDemo();

    }

    /**
     * 
     */
    private static void getDemo() {
    /*  
        实现获取,将符合规则的内容提取出来
        用到正则表达式对象。java.util.regex.Pttern

        1、将字符串数组封装成Pattern对象  compile(regex)
        2、通过正则对象获取匹配器对象   用将正则规则作用到要操作的字符串上
        3、通过匹配器对象的方法,对字符串进行操作

        Pattern pattern=Pattern.compile("a*b");//将规则编译成对象
        Matcher matcher=pattern.matcher("abcd");//和要操作的字符串关联,生成匹配器对象
        boolean b=matcher.matches();//使用匹配字符串方法对字符串操作
    */  
        //取出字符串中符合规则的内容
        String temp="wei shen me xia yu bu da shan";
        //取出由三个字母组成的单词
        String regex="[a-zA-Z]{3}";

//      将规则编译成Pattern对象
        Pattern pattern=Pattern.compile(regex);

//      和字符串关联,获取匹配器对象
        Matcher matcher=pattern.matcher(temp);
        /*System.out.println(matcher.find());
        System.out.println(matcher.group());*/

        while(matcher.find()){
            System.out.println(matcher.start()+":"+matcher.group()+":"+matcher.end());
        }


    }

    /**
     * 
     */
    private static void replaceDemo() {
        String temp="13127716930";
        temp=temp.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");// $可以在多参数时,后面的参数可以通过¥编号的形式取到前一个参数的组
//      System.out.println(temp);

        String strs="qw##%%refefkffrrr";
        strs=strs.replaceAll("(.)\\1+","&" );//所有的叠词替换成&    qw&&refefk&&

        strs=strs.replaceAll("(.)\\1+","&1" );//所有的叠词替换成&   qw&1refefk&1
        System.out.println(strs);
    }

    /**
     * 
     */
    private static void splitDemo() {
        String temp="小王八   ,  李四  wewe   dddd ";
        String regex=" +";//包含1-n个空格一起切


        String netadd="www.baidu.com";
        String net="\\.";

        String vo="saadiioshddhsssss";
        String resvo="(.)\\1+";//为了实现规则的复用,用()将需要复用的规则封装,就称为正则表达式中的组。每一个组都有一个编号,从1开始
//      通过使用编号就可以复用对应组的规则内容。注意:编号必须用到组的后面】
//      也就是说:先封装完再调用

        String[] names=temp.split(regex);
        for(String name:names){
//          System.out.println(name+"--");
        }
        String[] strs=netadd.split(net);
        for(String str:strs){
//          System.out.println(str);
        }

        String[] vos=vo.split(resvo);
        for(String v:vos){
            System.out.println(v);
        }

    }

    /**
     * 
     */
    private static void matchesDemo() {
        //需求:校验手机号码是否正确
        String tel="13255538615";
        String regex="1[32456789][0-9]{9}";
        boolean b=tel.matches(regex);
        System.out.println(tel+"\t"+b);
    }
}
package cn.myframe.demo;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NetSpider {
    /**
    * @param args
     * @throws IOException 
    */
    public static void main(String[] args) throws IOException {
//      1、将文件封装成对象
        File file=new File("mail.html");
        if(!file.exists()){
            file.createNewFile();
        }
        String regex="\\w+@\\w+(\\.\\w)+";


        List<String> mailList=getMails(file,regex);
        for(String mail : mailList){
            System.out.println(mail);
        }
    }

    /**
     * @param file
     * @return
     */
    private static List<String> getMails(File file,String regex) throws IOException {
//      读取数据
        BufferedReader bufferedReader=new BufferedReader(new FileReader(file));

//      将正则封装成对象
        Pattern pattern=Pattern.compile(regex);

//      定义list集合
        List<String> list=new ArrayList<String>();
        String line=null;
        while((line=bufferedReader.readLine())!=null){
            Matcher matcher=pattern.matcher(line);
            while(matcher.find()){
                list.add(matcher.group());
            }
        }
        return list;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值