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.pswp.cn/news/538516.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538516.shtml
英文地址,請注明出處:http://en.pswp.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;下面說一…