python桌面开发吐血_想用java写个桌面小demo,就布局都差点写吐血了,学艺不精...

demo简略需求

项目背景

很多文件重复存放,除了管理混乱,还会对患有强迫症用户的身心造成10000点的伤害...其实就是360云盘当时上传了有上传,造成很多重复的图片+视频,前阵子360个人云盘“倒闭”,电脑日夜兼程,始终把图片下了下来,下下来后,作为重度强迫症患者的我,看着无数张图片里面n多重复文件,吃不香睡不着....

点击“载入”,默认载入上次目录,若是第一次,默认载入文档图片目录,同时弹出“选择路径”菜单。选择需要载入的文件目录后,如果跟现载入的不一样,则中断载入操作,重新载入新路径。若一样,则继续载入;

图片预览,默认显示第一张,如果用户点击选择某一张,则图片预览变为用户选中的;

点击去重,弹出“重速度”(多线程),“重性能”(单线程)

点击撤销,恢复去重时删除的文件

去重:先判断文件名(除去“ - 副本”、“(1)”之类结尾的字符)是否重复,再判断文件大小+文件类型是否一样,如果都一样,则计算文件的md5值,通过md5值来判断。

第一次启动时,弹出倒计时框,提示去重撤销需要创建一个隐藏文件,如果不需要撤销,可以打钩,不创建隐藏文件,而是直接删除;

弹出免责声明,数据无价,请确认再去重(删除)。

UI样图,如下图

------------------------------------------------------------------------------------------

想用java写个桌面小demo,就布局都差点写吐血了,最终还是没学好,哎,都怪学艺不精

界面实现代码

package zuiquchong;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.GridLayout;

import javax.swing.BorderFactory;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextArea;

import javax.swing.SwingConstants;

/**

* @author 苏宝伢 E-mail:by.su@qq.com

* @version 创建时间: 2017年4月5日 下午12:47:32

*/

public class RemovalUI extends JFrame{

JPanel JPanelTitle,JPanelTextArea,JPanelLblPreview,JPanelOperation,JPanelContainer,JPanelLblStatusBar;

JButton btnLoader,btnRemoval,btnCancel,btnHistory;

JTextArea displayContent;

JLabel lblTitle,lblPreviewContent,lblStatusBar;

public RemovalUI(){

super("最去重文件管理器");

initialization();

}

public static void main(String[] args) {

new RemovalUI();

}

//初始化UI窗体

public void initialization(){

buildComponent();

addComponentToPanel();

componentStyle();

uiLayout();

this.setSize(800, 600);

this.setResizable(false); //不能改变大小

this.setVisible(true); //设置窗口可见

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

//创建各组件对象

public void buildComponent(){

JPanelTextArea = new JPanel();

JPanelContainer = new JPanel();

JPanelLblPreview = new JPanel();

JPanelOperation = new JPanel();

JPanelTitle = new JPanel();

JPanelLblStatusBar = new JPanel();

displayContent = new JTextArea(30,48);

lblTitle = new JLabel("最去重文件管理器",SwingConstants.CENTER);

lblPreviewContent = new JLabel();

btnLoader = new JButton("载入");

btnRemoval = new JButton("去重");

btnCancel = new JButton("撤销");

btnHistory = new JButton("历史记录");

lblStatusBar = new JLabel("by不最醉不龟归 | e-mail:by.su@qq.com",SwingConstants.RIGHT);

}

//往容器中添加组件

public void addComponentToPanel(){

this.add(JPanelTitle);

//this.add(JPanelTextArea);

this.add(JPanelContainer);

this.add(JPanelLblStatusBar);

JPanelTitle.add(lblTitle);

JPanelTextArea.add(displayContent);

JPanelLblStatusBar.add(lblStatusBar);

}

//窗体布局

public void uiLayout(){

//==============总体布局================================

this.setLayout(new BorderLayout(10,10));//边界布局

this.add(JPanelTextArea,BorderLayout.WEST);

this.add(JPanelContainer,BorderLayout.EAST);

this.add(JPanelTitle,BorderLayout.NORTH);

this.add(JPanelLblStatusBar,BorderLayout.SOUTH);

//===============右侧布局================================

JPanelContainer.setLayout(new GridLayout(2,1));//网格布局

JPanelContainer.add(lblPreviewContent);

JPanelContainer.add(JPanelOperation);

//================右下布局===============================

JPanelOperation.setLayout(null);//无布局,绝对布局

JPanelOperation.add(btnLoader);

JPanelOperation.add(btnRemoval);

JPanelOperation.add(btnCancel);

JPanelOperation.add(btnHistory);

btnLoader.setBounds(260,30,120,30);

btnRemoval.setBounds(260,80,120,30);

btnCancel.setBounds(260,130,120,30);

btnHistory.setBounds(260,180,120,30);

}

//组件样式

public void componentStyle(){

lblTitle.setFont(new java.awt.Font("",1,20));//设置lblTitle字体和大小

lblTitle.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));//设置lblTitle边框,上左下右

lblPreviewContent.setIcon(new ImageIcon("D://DSC_0675.jpg"));

lblPreviewContent.setSize(10,10);

btnLoader.setPreferredSize(new Dimension(30,30));

btnLoader.setBorderPainted(false);

btnRemoval.setBorderPainted(false);

btnCancel.setBorderPainted(false);

btnHistory.setBorderPainted(false);

//lblStatusBar.setBorder(BorderFactory.createEmptyBorder(580, 560, 0, 0));//状态栏个人信息向右对齐

}

}

-----------未完待续

package zuiquchong;

import java.io.File;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

/**

* @author 苏宝伢 E-mail:by.su@qq.com

* @version 创建时间: 2017年4月10日 下午2:25:10

*/

public class FileOperation {

//String strFilePath;

//显示目录下所有文件夹和文件,待用递归完善

public List displayFile(String strFilePath){

File f = new File(strFilePath);

File[] fileList = f.listFiles();

List fileNameList = new ArrayList<>();

for(File file:fileList){

fileNameList.add(file.getAbsolutePath());

}

return fileNameList;

}

}

package zuiquchong;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.FocusEvent;

import java.awt.event.FocusListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import javax.swing.BorderFactory;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.SwingConstants;

import javax.swing.event.CaretEvent;

import javax.swing.event.CaretListener;

/**

* @author 苏宝伢 E-mail:by.su@qq.com

* @version 创建时间: 2017年4月5日 下午12:47:32

*/

public class RemovalUI extends JFrame{

JPanel JPanelTitle,JPanelTextArea,JPanelLblPreview,JPanelOperation,JPanelContainer,JPanelLblStatusBar;

JButton btnLoader,btnRemoval,btnRecovery,btnHistory;

JTextArea displayContent;

JScrollPane scroll;

JLabel lblTitle,lblPreviewContent,lblStatusBar;

public RemovalUI(){

super("最去重文件管理器");

initialization();

}

public static void main(String[] args) {

new RemovalUI();

}

//初始化UI窗体

public void initialization(){

buildComponent();

addComponentToPanel();

componentStyle();

uiLayout();

this.setSize(800, 600);

this.setResizable(false); //不能改变大小

this.setVisible(true); //设置窗口可见

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

//创建各组件对象、添加监听对象、注册监听

public void buildComponent(){

JPanelTextArea = new JPanel();

JPanelTextArea = new JPanel();

JPanelContainer = new JPanel();

JPanelLblPreview = new JPanel();

JPanelOperation = new JPanel();

JPanelTitle = new JPanel();

JPanelLblStatusBar = new JPanel();

displayContent = new JTextArea(29,48);

scroll = new JScrollPane(displayContent);//添加滚动条

scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);//添加垂直方向滚动条

scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); //添加水平方向滚动条

lblTitle = new JLabel("最去重文件管理器",SwingConstants.CENTER);

lblPreviewContent = new JLabel();

btnLoader = new JButton("载入");

btnRemoval = new JButton("去重");

btnRecovery = new JButton("撤销");

btnHistory = new JButton("历史记录");

lblStatusBar = new JLabel("by不最醉不龟归 | e-mail:by.su@qq.com",SwingConstants.RIGHT);

//---创建监听对象

ButtonListener uiEvent = new ButtonListener();

FocusEventListener focusEvent = new FocusEventListener();

MouseEventListener mouseEvent = new MouseEventListener();

//注册监听btnLoader

btnLoader.addActionListener(uiEvent);

//注册监听btnRemoval

btnRemoval.addActionListener(uiEvent);

//注册监听btnCancel

btnRecovery.addActionListener(uiEvent);

//注册监听btnHistory

btnHistory.addActionListener(uiEvent);

//注册监听

displayContent.addFocusListener(focusEvent);

displayContent.addMouseListener(mouseEvent);

}

//往容器中添加组件

public void addComponentToPanel(){

this.add(JPanelTitle);

this.add(JPanelContainer);

this.add(JPanelLblStatusBar);

JPanelTitle.add(lblTitle);

JPanelTextArea.add(scroll);

//JPanelTextArea.add(displayContent);

JPanelLblStatusBar.add(lblStatusBar);

}

//窗体布局

public void uiLayout(){

//==============总体布局================================

this.setLayout(new BorderLayout(10,10));//边界布局

this.add(JPanelTextArea,BorderLayout.WEST);

this.add(JPanelContainer,BorderLayout.EAST);

this.add(JPanelTitle,BorderLayout.NORTH);

this.add(JPanelLblStatusBar,BorderLayout.SOUTH);

//===============右侧布局================================

JPanelContainer.setLayout(new GridLayout(2,1));//网格布局

JPanelContainer.add(lblPreviewContent);

JPanelContainer.add(JPanelOperation);

//================右下布局===============================

JPanelOperation.setLayout(null);//无布局,绝对布局

JPanelOperation.add(btnLoader);

JPanelOperation.add(btnRemoval);

JPanelOperation.add(btnRecovery);

JPanelOperation.add(btnHistory);

btnLoader.setBounds(260,30,120,30);

btnRemoval.setBounds(260,80,120,30);

btnRecovery.setBounds(260,130,120,30);

btnHistory.setBounds(260,180,120,30);

}

//组件样式

public void componentStyle(){

lblTitle.setFont(new java.awt.Font("",1,20));//设置lblTitle字体和大小

lblTitle.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));//设置lblTitle边框,上左下右

lblPreviewContent.setIcon(new ImageIcon("D://bysu//个人知识拓展//机器学习//PB1636 王者归来:OpenCV3使用Java开发手册//PB1636//samples//DSC_0675.jpg"));

lblPreviewContent.setSize(10,10);

btnLoader.setPreferredSize(new Dimension(30,30));

btnLoader.setBorderPainted(false);

btnRemoval.setBorderPainted(false);

btnRecovery.setBorderPainted(false);

btnHistory.setBorderPainted(false);

//lblStatusBar.setBorder(BorderFactory.createEmptyBorder(580, 560, 0, 0));//状态栏个人信息向右对齐

}

//Button按钮的内部监听类

class ButtonListener implements ActionListener{

String strPath = "D:\\Users\\EX-SUBAOYA001\\Documents";

@Override

public void actionPerformed(ActionEvent e){

Object source = e.getSource();

if(source == btnLoader){ //点击载入

displayContent.setText("");

FileOperation f = new FileOperation();

List list = f.displayFile(strPath);

for(Object obj:list){

displayContent.append((String)obj);

displayContent.append("\r\n");

}

//打开一个文件对话框

JFileChooser fc = new JFileChooser();

fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );

int chooseValue = fc.showOpenDialog(null);

if(chooseValue==JFileChooser.APPROVE_OPTION){

String chooseFilePath = fc.getSelectedFile().getPath();

if(!chooseFilePath.equals(strPath)){

displayContent.setText("");

list = f.displayFile(chooseFilePath);

for(Object obj:list){

displayContent.append((String)obj);

displayContent.append("\r\n");

}

strPath = chooseFilePath;

}else{

System.out.println("选中的文件目录与现在的一样");

}

}else{

System.out.println("没有选中文件夹");

}

}else if(source == btnRemoval){ //点击去重

System.out.println("btnRemoval");

}else if(source == btnRecovery){ //点击撤销

System.out.println("btnCancel");

}else{ //显示历史记录

System.out.println("btnHistory");

}

}

}

//FocusEvent焦点触发

class FocusEventListener implements FocusListener{

@Override

public void focusGained(FocusEvent e) {

Object source = e.getSource();

if(source == displayContent){

if(displayContent.getText()!=""){

System.out.println("点击文本编辑框" + displayContent.getRows());

}else{

System.out.println("文本框非空");

}

}

}

@Override

public void focusLost(FocusEvent e) {

}

}

//鼠标监听类

class MouseEventListener implements MouseListener{

FileOperation f = new FileOperation();

int count =0;

@Override

public void mouseClicked(MouseEvent e) {

Object source = e.getSource();

if(source == displayContent){

System.out.println(getRowText(displayContent.getText()));

}

}

@Override

public void mousePressed(MouseEvent e) {

}

@Override

public void mouseReleased(MouseEvent e) {

}

@Override

public void mouseEntered(MouseEvent e) {

}

@Override

public void mouseExited(MouseEvent e) {

}

}

//JTextArea内容

FileOperation f = new FileOperation();

//显示JTextArea控件中所在行的内容

public String getRowText(String text){

public int rows = 0;

displayContent.addCaretListener(new CaretListener() {

public void caretUpdate(CaretEvent e) {

try {

int offset = e.getDot() ; //获得插入符的位置。

//getLineOfOffset(int offset) 将组件文本中的偏移量转换为行号

int row = displayContent.getLineOfOffset(offset);

//getLineStartOffset(int line) 取得给定行起始处的偏移量。

//getLineEndOffset(int line) 取得给定行结尾处的偏移量。

int column = e.getDot() - displayContent.getLineStartOffset(row);

// 在状态栏中显示当前光标所在行号、所在列号

System.out.println("Line: " + (row + 1) + ", Column: " + (column+1));

row = displayContent.getLineStartOffset(row+1);

System.out.println(row +"fffff");

} catch (Exception ex) {

ex.printStackTrace();

}

}

});

String getText="";

String regex = "\n";

Pattern p =Pattern.compile(regex);

String[] r = p.split(text);

if(!((r[rows-1].trim()).equals(""))){

getText = r[rows-1];

}

return getText;

}

}

/*package zuiquchong;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.List;

import javax.swing.BorderFactory;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.SwingConstants;

*//**

* @author 苏宝伢 E-mail:by.su@qq.com

* @version 创建时间: 2017年4月5日 下午12:47:32

*//*

public class RemovalUI extends JFrame{

JPanel JPanelTitle,JPanelTextArea,JPanelLblPreview,JPanelOperation,JPanelContainer,JPanelLblStatusBar;

JButton btnLoader,btnRemoval,btnCancel,btnHistory;

JTextArea displayContent;

JScrollPane scroll;

JLabel lblTitle,lblPreviewContent,lblStatusBar;

public RemovalUI(){

super("最去重文件管理器");

initialization();

}

public static void main(String[] args) {

new RemovalUI();

}

//初始化UI窗体

public void initialization(){

buildComponent();

addComponentToPanel();

componentStyle();

uiLayout();

this.setSize(800, 600);

this.setResizable(false); //不能改变大小

this.setVisible(true); //设置窗口可见

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

//创建各组件对象、添加监听对象、注册监听

public void buildComponent(){

JPanelTextArea = new JPanel();

JPanelTextArea = new JPanel();

JPanelContainer = new JPanel();

JPanelLblPreview = new JPanel();

JPanelOperation = new JPanel();

JPanelTitle = new JPanel();

JPanelLblStatusBar = new JPanel();

displayContent = new JTextArea(30,48);

scroll = new JScrollPane(displayContent);//添加滚动条

scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

lblTitle = new JLabel("最去重文件管理器",SwingConstants.CENTER);

lblPreviewContent = new JLabel();

btnLoader = new JButton("载入");

btnRemoval = new JButton("去重");

btnCancel = new JButton("撤销");

btnHistory = new JButton("历史记录");

lblStatusBar = new JLabel("by不最醉不龟归 | e-mail:by.su@qq.com",SwingConstants.RIGHT);

//---创建监听对象

ButtonListener uiEvent = new ButtonListener();

//注册监听btnLoader

btnLoader.addActionListener(uiEvent);

//注册监听btnRemoval

btnRemoval.addActionListener(uiEvent);

//注册监听btnCancel

btnCancel.addActionListener(uiEvent);

//注册监听btnHistory

btnHistory.addActionListener(uiEvent);

}

//往容器中添加组件

public void addComponentToPanel(){

this.add(JPanelTitle);

this.add(JPanelContainer);

this.add(JPanelLblStatusBar);

JPanelTitle.add(lblTitle);

JPanelTextArea.add(displayContent);

JPanelLblStatusBar.add(lblStatusBar);

}

//窗体布局

public void uiLayout(){

//==============总体布局================================

this.setLayout(new BorderLayout(10,10));//边界布局

this.add(JPanelTextArea,BorderLayout.WEST);

this.add(JPanelContainer,BorderLayout.EAST);

this.add(JPanelTitle,BorderLayout.NORTH);

this.add(JPanelLblStatusBar,BorderLayout.SOUTH);

//===============右侧布局================================

JPanelContainer.setLayout(new GridLayout(2,1));//网格布局

JPanelContainer.add(lblPreviewContent);

JPanelContainer.add(JPanelOperation);

//================右下布局===============================

JPanelOperation.setLayout(null);//无布局,绝对布局

JPanelOperation.add(btnLoader);

JPanelOperation.add(btnRemoval);

JPanelOperation.add(btnCancel);

JPanelOperation.add(btnHistory);

btnLoader.setBounds(260,30,120,30);

btnRemoval.setBounds(260,80,120,30);

btnCancel.setBounds(260,130,120,30);

btnHistory.setBounds(260,180,120,30);

}

//组件样式

public void componentStyle(){

lblTitle.setFont(new java.awt.Font("",1,20));//设置lblTitle字体和大小

lblTitle.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));//设置lblTitle边框,上左下右

lblPreviewContent.setIcon(new ImageIcon("D://bysu//个人知识拓展//机器学习//PB1636 王者归来:OpenCV3使用Java开发手册//PB1636//samples//DSC_0675.jpg"));

lblPreviewContent.setSize(10,10);

btnLoader.setPreferredSize(new Dimension(30,30));

btnLoader.setBorderPainted(false);

btnRemoval.setBorderPainted(false);

btnCancel.setBorderPainted(false);

btnHistory.setBorderPainted(false);

//lblStatusBar.setBorder(BorderFactory.createEmptyBorder(580, 560, 0, 0));//状态栏个人信息向右对齐

}

//内部监听类

class ButtonListener implements ActionListener{

@Override

public void actionPerformed(ActionEvent e){

Object source = e.getSource();

if(source == btnLoader){

displayContent.setText("");

String strPath = "D:/Users/EX-SUBAOYA001/Documents";

FileOperation f = new FileOperation();

List list = f.displayFile(strPath);

for(Object obj:list){

displayContent.append((String)obj);

displayContent.append("\r\n");

}

//打开一个文件对话框

JFileChooser fc = new JFileChooser();

fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );

fc.showOpenDialog(null);

String chooseFilePath = fc.getSelectedFile().getPath();

if(chooseFilePath!=strPath){

displayContent.setText("");

list = f.displayFile(chooseFilePath);

for(Object obj:list){

displayContent.append((String)obj);

displayContent.append("\r\n");

}

}else{

}

}else if(source == btnRemoval){

System.out.println("btnRemoval");

}else if(source == btnCancel){

System.out.println("btnCancel");

}else{

System.out.println("btnHistory");

}

}

}

}*/

public String getRowText(String text){

int rows = 0;

class MyCaretListener implements CaretListener{

int tempResult = 0;

@Override

public void caretUpdate(CaretEvent e) {

try {

int offset = e.getDot() ; //获得插入符的位置。

//getLineOfOffset(int offset) 将组件文本中的偏移量转换为行号

int row = displayContent.getLineOfOffset(offset);

//getLineStartOffset(int line) 取得给定行起始处的偏移量。

//getLineEndOffset(int line) 取得给定行结尾处的偏移量。

int column = e.getDot() - displayContent.getLineStartOffset(row);

// 在状态栏中显示当前光标所在行号、所在列号

System.out.println("Line: " + (row + 1) + ", Column: " + (column+1));

tempResult = displayContent.getLineStartOffset(row+1);

System.out.println(row +"fffff");

} catch (Exception ex) {

ex.printStackTrace();

}

}

public int getResult(){//为了从内部类中取出结果

return tempResult;

}

}

MyCaretListener mycaretListener = new MyCaretListener();

displayContent.addCaretListener(mycaretListener);

rows = mycaretListener.getResult();

String getText="";

String regex = "\n";

Pattern p =Pattern.compile(regex);

String[] r = p.split(text);

if(!((r[rows-1].trim()).equals(""))){

getText = r[rows-1];

}

return getText;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 取当前日期时间的前一天前一小时前一分钟前一秒

原文链接&#xff1a;http://wentao365.iteye.com/blog/779492 点击阅读原文 --------------------------------------------------------------------------- SELECT 当前时间 TITLE, TO_CHAR(SYSDATE, yyyy-mm-dd hh24:mi:ss) TIME FROM DUAL --当前时间 UNION ALL S…

mysql8事务级别_Mysql几种事务隔离级别

前言&#xff1a;之前对mysql的基础知识通过了几篇博客进行了一个详解&#xff0c;包括从数据库系统的原理以及最基本的操作使用&#xff0c;此篇博客将主要对mysql的事务级别进行实战分析1.什么是事务&#xff1f;事务是应用程序中一系列严密的操作&#xff0c;所有操作必须成…

控制台应用和空项目有什么区别_互联网小程序的应用以及APP的应用有什么区别及发展...

随时移动互联网进入的千家万户&#xff0c;互联网的手机应用程序也渐渐的在市场上流行起来了。今天主要跟大家谈一下互联网小程序的应用以及APP的应用有什么区别以及未来的发展趋。未来会流行什么手机应用或者APP应用&#xff0c;我带大家都为了解一下。下边先来了解一下小程序…

day19_java基础加强_动态代理+注解+类加载器

一、动态代理 1.1、代理模式 什么是代理模式及其作用&#xff1f; Proxy Pattern&#xff08;即&#xff1a;代理模式&#xff09;&#xff0c;23种常用的面向对象软件的设计模式之一。        代理模式的定义&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。 …

mysql压力写入测试_mysql压力测试工具

相关推荐&#xff1a;测试工具测试工具 测试管理工具 Quality Center 基于WEB的测试管理工具 Test Director 功能测试工具 QuickTest Professional 性能测试工具 LoadRunner 哪位仁兄有相关…

python中队列的应用用场景_消息队列应用场景

原文http://blog.csdn.net/konglongaa/article/details/52208273一、消息队列概述消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致…

oracle获取一段时间内所有的小时、天、月

原文链接&#xff1a;http://blog.csdn.net/ld422586546/article/details/9626921/ 点击阅读原文 ---------------------------------------------------------------------- 获取一段时间内所有的小时 SELECT to_date(2013-07-01 12, yyyy-mm-dd hh24) (ROWNUM - 1) / 24 s…

eclipse快捷键、智能提示

1、Alt / 调出智能提示功能&#xff0c;即使在XML文件中&#xff1b; 2、 转载于:https://www.cnblogs.com/JAVA-STUDYER/p/9143862.html

python下载网页歌词_python3个人学习笔记-批量下载分析歌词2

我发现之前自己真是太愚蠢了没有搞清楚正则表达的各种用法。不同词语的筛选根本不用像re.sub(另一个想替换的内容,另一个替换后的内容,re.sub(想要替换的内容,替换后的内容,x))这样傻了吧唧地筛一层又一层……(受linux的pipe荼毒太深)正则表达中不同字符的or其实大家都知道是[a…

使用循环链表实现一个通讯录的管理程序_【LeetCode链表题型总结】

点击上方蓝字&#xff0c;关注公众号链表概念的讲解链表是什么链表是一种线性数据结构&#xff0c;每个节点都存有数据&#xff0c;通过指针将各个节点链接在一起。链表的性质一致性: 每个节点有相同的数据结构&#xff0c;相同的数据大小&#xff0c;内存中占据相同的大小&…

win10 C盘超过50G?教你如何对C盘瘦身!

原文链接&#xff1a;http://blog.csdn.net/u012762305/article/details/53469446 点击阅读原文 ------------------------------------------- 本人C盘是128G SSD硬盘&#xff0c;Win10系统盘和一些常用的程序都装在这个盘&#xff08;特大程序除外&#xff09;&#xff0c;…

python的kite下载安装及使用_Kite下载|Kite Python编程工具 V1.2020.1203.0 最新版下载 - 下载银行...

Kite是一款专为Python打造的一款代码补全软件&#xff0c;如果你正在学习Python或是从事与Python相关的编程工作&#xff0c;那么这款软件绝对是你的好帮手&#xff01;其会智能判断用户想要输入的每个代码字段&#xff0c;并在所有库中进行匹配相应的内容&#xff0c;如果看到…

layui前端时间戳转化

https://blog.csdn.net/rightbeforethesix/article/details/80358890转载于:https://www.cnblogs.com/newlangwen/p/9144204.html

单页web应用是什么?它又会给传统网站带来哪些好处?

原文链接&#xff1a;http://blog.csdn.net/zuoninger/article/details/38842823 点击阅读原文 ---------------------------------------------------- 什么是单页应用&#xff1f; 单页应用是指在浏览器中运行的应用&#xff0c;它们在使用期间不会重新加载页面。像所有的…

python图像等比例压缩_python使用pil进行图像处理(等比例压缩、裁剪)实例代码

PIL中设计的几个基本概念1.通道(bands)&#xff1a;即使图像的波段数&#xff0c;RGB图像&#xff0c;灰度图像以RGB图像为例&#xff1a;>>>from PIL import Image>>>im Image.open(*.jpg) # 打开一张RGB图像>>>im_bands im.getbands() # 获取RG…

python的urllib四大模块_Python常用的内建模块4:urllib

urllib提供了一系列用于操作URL的功能Geturllib的request模块可以非常方便的抓取URL的内容, 也就是发送一个GET请求到制定的页面, 然后返回HTTP的响应:例如, 对豆瓣的一个URLhttps://api.douban.com/v2/book/2129650进行抓取, 并返回响应:from urllib import requestwith reque…

Linux 升级 Python 至 3.x

原文链接&#xff1a;http://blog.csdn.net/liang19890820/article/details/51079633 -------------------------------------------- 简述 CentOS 7 中默认安装了 Python&#xff0c;版本比较低&#xff08;2.7.5&#xff09;&#xff0c;为了使用新版 3.x&#xff0c;需要对…

Sublime Text 3 配置python交互运行环境的快捷键

2019独角兽企业重金招聘Python工程师标准>>> 使用Sublime Text 3能以轻量级的环境写python脚本&#xff0c;运行python代码。为了更加方便地调用python脚本&#xff0c;通过在Sublime Text 3中绑定快捷键的方式&#xff0c;实现一键调用python交互运行环境&#xff…

xftp如何搜索文件_头条搜索站长平台如何添加网站和sitemap文件?附图文教程

头条搜索站长平台已经上线了&#xff0c;目前我们广大站长都可以登录该平台后添加新网站和提交 sitemap 地图文件&#xff0c;建议大家可以前往尝试一下&#xff0c;多一个搜索平台就多一条路&#xff0c;认为倒是挺好的。下面就跟大家简单介绍头条搜索站长平台如何添加网站和提…

Angular4中常用管道

原文链接&#xff1a;http://blog.csdn.net/haijing1995/article/details/71404350 ----------------------------------------------------- Angular4中常用管道 通常我们需要使用管道实现对数据的格式化&#xff0c;Angular4中的管道和之前有了一些变化&#xff0c;下面说一…