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;
}
}