Eclipse+Java+Swing实现电子相册管理系统

简介: Eclipse+Java+Swing实现电子相册管理系统

一、系统介绍


本系统实现了对电脑目录的读取,实现电脑目录的前进后退功能;实现电子相册的查看、重命名,复制,粘贴,删除功能;实现电子相册的上一张,下一张全屏播放,幻灯片播放,每2s一次,可以自己设置。界面良好。


二、系统展示


1.主界面


20200909072309468.jpg


2.全屏主界面


20200909072336223.jpg


3.放大图片


20200909072407453.jpg


4.缩小图片


20200909072445337.jpg


5.幻灯片放映


2020090907252222.jpg


三、系统实现


AutoPlay.java

package com.sjsq;
import java.util.Timer;
import java.util.TimerTask;
/**
 * 
 * 自动播放
 * 
 * @author 浪客剑心
 * 
 * @author shuijianshiqing
 *
 * @date 2020-09-08 19:29
 *
 */
public class AutoPlay {
  private int second;
  FullFrame frame;
  private final Timer timer = new Timer();
  // 设置播放时间间隔为2s
  public AutoPlay(FullFrame fullFrame) {
    this.frame = fullFrame;
    second = 2;
  }
  public void start() {
    timer.schedule(new TimerTask() {
      public void run() {
        frame.Forward();
        frame.getJButton1().setEnabled(false);
      }
    }, second * 1000, second * 1000);
  }
  public void stop() {
    timer.cancel();
  }
}

FileNode.java

package com.sjsq;
import java.io.File;
import java.io.IOException;
import javax.swing.tree.DefaultMutableTreeNode;
public class FileNode extends DefaultMutableTreeNode {
  private boolean explored_ = false;
  public FileNode(File file) {
    setUserObject(file);
  }
  public boolean getAllowChildren() {
    return isDirectory();
  }
  public boolean isLeaf() {
    return !isDirectory();
  }
  public File getFile() {
    return (File) getUserObject();
  }
  public boolean isExplored() {
    return explored_;
  }
  public boolean isDirectory() {
    File file = getFile();
    return file.isDirectory();
  }
  public String toString() {
    File file = getFile();
    String filename = file.toString();
    int index = filename.lastIndexOf("\\");
    return (index != -1 && index != filename.length() - 1) ? filename.substring(index + 1) : filename;
  }
  public String getString() {
    File file = getFile();
    String filename = file.getAbsolutePath();
    return filename;
  }
  public File getWorR() {
    File file = getFile();
    File file1 = file.getAbsoluteFile();
    return file1;
  }
  public String getWorR1() throws IOException {
    File file = getFile();
    String file1 = file.getPath();
    return file1;
  }
  public void explore() {
    if (!isDirectory()) {
      return;
    }
    if (!isExplored()) {
      File file = getFile();
      File[] children = file.listFiles();
      for (int i = 0; i < children.length; ++i) {
        if (children[i].isDirectory()) {
          add(new FileNode(children[i]));
        }
      }
      explored_ = true;
    }
  }
}

FullFrame.java

package com.sjsq;
import java.awt.Image;
import java.io.File;
import java.util.ArrayList;
import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.LayoutStyle;
import javax.swing.SwingConstants;
/**
 * 
 * 全屏
 * 
 * @author shuijianshiqing
 *
 * @date 2020-09-08 19:32
 *
 */
public class FullFrame extends JFrame {
  private JButton jButton1;
  private JButton jButton2;
  private JButton jButton3;
  private JButton jButton4;
  private JButton jButton5;
  private JButton jButton6;
  private JLabel jLabel1;
  private JScrollPane jScrollPane1;
  private JToolBar jToolBar1;
  ArrayList<File> ClickedFilePath = new ArrayList<File>();
  ArrayList<JTextField> ImagesNameTF = new ArrayList<JTextField>();
  ArrayList<JLabel> SmallLabels = new ArrayList<JLabel>();
  int SelectImage = 0;
  double CurrentMultiple = 1;
  int ImagesQuantity = 0;
  int flag = 0;
  AutoPlay play;
  String OpenFilePath;
  public FullFrame(ArrayList<File> ClickedFilePath, ArrayList<JTextField> ImagesNameTF, int SelectImage,
      int ImagesQuantity, ArrayList<JLabel> SmallLabels, String OpenFilePath) {
    initComponents();
    setTitle("电子相册全屏操作页面");
    setExtendedState(JFrame.MAXIMIZED_BOTH);
    this.ClickedFilePath = ClickedFilePath;
    this.ImagesNameTF = ImagesNameTF;
    this.SelectImage = SelectImage;
    this.ImagesQuantity = ImagesQuantity - 1;
    this.SmallLabels = SmallLabels;
    this.OpenFilePath = OpenFilePath;
    if (SelectImage == -1) {
      jButton2.setEnabled(false);
      jButton1.setEnabled(false);
      jButton5.setEnabled(false);
      jButton6.setEnabled(false);
    }
    if (SelectImage == 0) {
      jButton1.setEnabled(false);
      jButton1.setEnabled(false);
    }
    if (SelectImage == ImagesQuantity - 1) {
      jButton1.setEnabled(true);
      jButton2.setEnabled(false);
      jButton3.setEnabled(true);
      jButton4.setEnabled(true);
      jButton5.setEnabled(false);
      jButton6.setEnabled(false);
    }
    if (SelectImage != ImagesQuantity - 1 && SelectImage != 0 && SelectImage != -1) {
      jButton1.setEnabled(true);
      jButton2.setEnabled(true);
      jButton3.setEnabled(true);
      jButton4.setEnabled(true);
      jButton5.setEnabled(true);
      jButton6.setEnabled(true);
    }
  }
  public void Back() {
    if (SelectImage - 1 >= 0) {
      for (int i = 0; i < ClickedFilePath.size(); i++) {
        if (ClickedFilePath.get(i).getName().equals(ImagesNameTF.get(SelectImage - 1).getText())) {
          ImageIcon ic1 = new ImageIcon(ClickedFilePath.get(i).getAbsolutePath());
          Image im = ic1.getImage().getScaledInstance(ic1.getIconWidth(), ic1.getIconHeight(),
              Image.SCALE_DEFAULT);
          ImageIcon ic2 = new ImageIcon(im);
          getJLabel1().setIcon(ic2);
        }
      }
      SelectImage = SelectImage - 1;
      if (SelectImage == 0) {
        getJButton1().setEnabled(false);
      } else {
        getJButton1().setEnabled(true);
        jButton2.setEnabled(true);
        jButton3.setEnabled(true);
        jButton4.setEnabled(true);
        jButton5.setEnabled(true);
        jButton6.setEnabled(true);
      }
    }
  }
  public void Forward() {
    if (SelectImage + 1 <= ImagesQuantity) {
      for (int i = 0; i < ClickedFilePath.size(); i++) {
        if (ClickedFilePath.get(i).getName().equals(ImagesNameTF.get(SelectImage + 1).getText())) {
          ImageIcon ic1 = new ImageIcon(ClickedFilePath.get(i).getAbsolutePath());
          Image im = ic1.getImage().getScaledInstance(ic1.getIconWidth(), ic1.getIconHeight(),
              Image.SCALE_DEFAULT);
          ImageIcon ic2 = new ImageIcon(im);
          getJLabel1().setIcon(ic2);
        }
      }
      SelectImage = SelectImage + 1;
      if (SelectImage == ImagesQuantity) {
        jButton2.setEnabled(false);
        jButton5.setEnabled(false);
        jButton6.setEnabled(false);
        getJButton1().setEnabled(true);
        jButton3.setEnabled(true);
        jButton4.setEnabled(true);
      } else {
        jButton1.setEnabled(true);
      }
    }
  }
  public void Enlarge() {
    if (SelectImage == -1) {
      ImageIcon ic1 = new ImageIcon(OpenFilePath);
      double w = ic1.getIconWidth();
      double h = ic1.getIconHeight();
      Image im = ic1.getImage().getScaledInstance((int) (w * (CurrentMultiple + 0.25)),
          (int) (h * (CurrentMultiple + 0.25)), Image.SCALE_DEFAULT);
      ImageIcon ic2 = new ImageIcon(im);
      getJLabel1().setIcon(ic2);
    } else {
      if (SelectImage != flag) {
        CurrentMultiple = 1;
      }
      for (int i = 0; i < ClickedFilePath.size(); i++) {
        if (ClickedFilePath.get(i).getName().equals(ImagesNameTF.get(SelectImage).getText())) {
          ImageIcon ic1 = new ImageIcon(ClickedFilePath.get(i).getAbsolutePath());
          double w = ic1.getIconWidth();
          double h = ic1.getIconHeight();
          Image im = ic1.getImage().getScaledInstance((int) (w * (CurrentMultiple + 0.25)),
              (int) (h * (CurrentMultiple + 0.25)), Image.SCALE_DEFAULT);
          ImageIcon ic2 = new ImageIcon(im);
          getJLabel1().setIcon(ic2);
        }
      }
    }
    CurrentMultiple = CurrentMultiple + 0.25;
    flag = SelectImage;
  }
  public void Decrease() {
    if (SelectImage == -1) {
      ImageIcon ic1 = new ImageIcon(OpenFilePath);
      double w = ic1.getIconWidth();
      double h = ic1.getIconHeight();
      Image im = ic1.getImage().getScaledInstance((int) (w * (CurrentMultiple - 0.25)),
          (int) (h * (CurrentMultiple - 0.25)), Image.SCALE_DEFAULT);
      ImageIcon ic2 = new ImageIcon(im);
      getJLabel1().setIcon(ic2);
    } else {
      if (SelectImage != flag) {
        CurrentMultiple = 1;
      }
      for (int i = 0; i < ClickedFilePath.size(); i++) {
        if (ClickedFilePath.get(i).getName().equals(ImagesNameTF.get(SelectImage).getText())) {
          ImageIcon ic1 = new ImageIcon(ClickedFilePath.get(i).getAbsolutePath());
          double w = ic1.getIconWidth();
          double h = ic1.getIconHeight();
          Image im = ic1.getImage().getScaledInstance((int) (w * (CurrentMultiple - 0.25)),
              (int) (h * (CurrentMultiple - 0.25)), Image.SCALE_DEFAULT);
          ImageIcon ic2 = new ImageIcon(im);
          getJLabel1().setIcon(ic2);
        }
      }
    }
    CurrentMultiple = CurrentMultiple - 0.25;
    flag = SelectImage;
  }
  @SuppressWarnings("unchecked")
  private void initComponents() {
    jToolBar1 = new JToolBar();
    jButton1 = new JButton();
    jButton2 = new JButton();
    jButton3 = new JButton();
    jButton4 = new JButton();
    jButton5 = new JButton();
    jButton6 = new JButton();
    jScrollPane1 = new JScrollPane();
    jLabel1 = new JLabel();
    jToolBar1.setRollover(true);
    jButton1.setIcon(new ImageIcon(getClass().getResource("/images/2.JPG"))); // NOI18N
    jButton1.setFocusable(false);
    jButton1.setHorizontalTextPosition(SwingConstants.CENTER);
    jButton1.setVerticalTextPosition(SwingConstants.BOTTOM);
    jButton1.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        jButton1ActionPerformed(evt);
      }
    });
    jToolBar1.add(jButton1);
    jButton2.setIcon(new ImageIcon(getClass().getResource("/images/1.jpg")));
    jButton2.setFocusable(false);
    jButton2.setHorizontalTextPosition(SwingConstants.CENTER);
    jButton2.setVerticalTextPosition(SwingConstants.BOTTOM);
    jButton2.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        jButton2ActionPerformed(evt);
      }
    });
    jToolBar1.add(jButton2);
    jButton3.setIcon(new ImageIcon(getClass().getResource("/images/3.jpg"))); // NOI18N
    jButton3.setFocusable(false);
    jButton3.setHorizontalTextPosition(SwingConstants.CENTER);
    jButton3.setVerticalTextPosition(SwingConstants.BOTTOM);
    jButton3.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        jButton3ActionPerformed(evt);
      }
    });
    jToolBar1.add(jButton3);
    jButton4.setIcon(new ImageIcon(getClass().getResource("/images/4.jpg"))); // NOI18N
    jButton4.setFocusable(false);
    jButton4.setHorizontalTextPosition(SwingConstants.CENTER);
    jButton4.setVerticalTextPosition(SwingConstants.BOTTOM);
    jButton4.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        jButton4ActionPerformed(evt);
      }
    });
    jToolBar1.add(jButton4);
    jButton5.setIcon(new ImageIcon(getClass().getResource("/images/5.jpg"))); // NOI18N
    jButton5.setFocusable(false);
    jButton5.setHorizontalTextPosition(SwingConstants.CENTER);
    jButton5.setVerticalTextPosition(SwingConstants.BOTTOM);
    jButton5.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        jButton5ActionPerformed(evt);
      }
    });
    jToolBar1.add(jButton5);
    jButton6.setIcon(new ImageIcon(getClass().getResource("/images/6.jpg"))); // NOI18N
    jButton6.setFocusable(false);
    jButton6.setHorizontalTextPosition(SwingConstants.CENTER);
    jButton6.setVerticalTextPosition(SwingConstants.BOTTOM);
    jButton6.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        jButton6ActionPerformed(evt);
      }
    });
    jToolBar1.add(jButton6);
    jScrollPane1.setViewportView(jLabel1);
    GroupLayout layout = new GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addComponent(jToolBar1, GroupLayout.PREFERRED_SIZE, 382,
                GroupLayout.PREFERRED_SIZE)
            .addContainerGap(278, Short.MAX_VALUE))
        .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 660, Short.MAX_VALUE));
    layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addComponent(jToolBar1, GroupLayout.PREFERRED_SIZE,
                GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 480, Short.MAX_VALUE)));
    pack();
  }
  @SuppressWarnings("empty-statement")
  private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
    Decrease();
  }
  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    Back();
  }
  private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    Forward();
  }
  private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
    Enlarge();
  }
  private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
    jButton6.setEnabled(true);
    jButton2.setEnabled(false);
    getJButton1().setEnabled(false);
    jButton3.setEnabled(false);
    jButton4.setEnabled(false);
    jButton5.setEnabled(false);
    play = new AutoPlay(this);
    play.start();
  }
  private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {
    play.stop();
    jButton2.setEnabled(true);
    getJButton1().setEnabled(true);
    jButton3.setEnabled(true);
    jButton4.setEnabled(true);
    jButton5.setEnabled(true);
  }
  public JLabel getJLabel1() {
    return jLabel1;
  }
  public void setJLabel1(JLabel jLabel1) {
    this.jLabel1 = jLabel1;
  }
  public JButton getJButton1() {
    return jButton1;
  }
}

PFileSystemView.java

package com.sjsq;
import java.io.File;
import java.io.IOException;
import javax.swing.filechooser.FileSystemView;
/**
 * 
 * 创建新文件
 * 
 * @author shuijianshiqing
 *
 * @date 2020-09-08 19:26
 *
 */
class PFileSystemView extends FileSystemView {
  public File createNewFolder(File containingDir) throws IOException {
    return null;
  }
}

ThreadImages.java

package com.sjsq;
import java.awt.Image;
import java.io.File;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class ThreadImages implements Runnable {
  ArrayList<JLabel> SmallLabels = new ArrayList<JLabel>();
  ArrayList<JTextField> SmallTextFields = new ArrayList<JTextField>();
  ArrayList<JPanel> SmallPanels = new ArrayList<JPanel>();
  JPanel ImagePanel;
  int i;
  ArrayList<File> ImageFiles;
  int k;
  ThreadImages(ArrayList<File> ImageFiles, int k, int i, ArrayList<JLabel> SmallLabels,
      ArrayList<JTextField> SmallTextFields, ArrayList<JPanel> SmallPanels, JPanel ImagePanel) {
    this.k = k;
    this.ImageFiles = ImageFiles;
    this.i = i;
    this.SmallLabels = SmallLabels;
    this.SmallTextFields = SmallTextFields;
    this.SmallPanels = SmallPanels;
    this.ImagePanel = ImagePanel;
  }
  public synchronized void run() {
    for (int j = k; j < i; j++) {
      ImageIcon ic1 = new ImageIcon(ImageFiles.get(j).getAbsolutePath());
      double h1 = ic1.getIconHeight();
      double w1 = ic1.getIconWidth();
      if (h1 < 77 && w1 < 100) {
        Image im = ic1.getImage().getScaledInstance((int) w1, (int) h1, Image.SCALE_DEFAULT);// 改变大小
        ImageIcon ic2 = new ImageIcon(im);// 从新得到一个固定图片
        // SmallLabels.add(j, new JLabel());
        // SmallTextFields.add(j, new JTextField());
        SmallLabels.get(j).setIcon(ic2);
        ic2.setImageObserver(SmallLabels.get(j));
        SmallTextFields.get(j).setText(ImageFiles.get(j).getName());
      } else {
        if (h1 * 180 > w1 * 142) {
          Image im = ic1.getImage().getScaledInstance((int) (w1 / (h1 / 81)), 81, Image.SCALE_DEFAULT);// 改变大小
          ImageIcon ic2 = new ImageIcon(im);// 从新得到一个固定图片
          SmallLabels.get(j).setIcon(ic2);
          ic2.setImageObserver(SmallLabels.get(j));
          SmallTextFields.get(j).setText(ImageFiles.get(j).getName());
        } else {
          Image im = ic1.getImage().getScaledInstance(105, (int) (h1 / (w1 / 105)), Image.SCALE_DEFAULT);// 改变大小
          final ImageIcon ic2 = new ImageIcon(im);// 从新得到一个固定图片
          SmallLabels.get(j).setIcon(ic2);
          ic2.setImageObserver(SmallLabels.get(j));
          SmallTextFields.get(j).setText(ImageFiles.get(j).getName());
        }
      }
      ImagePanel.add(SmallPanels.get(j));
      if (ImageFiles.size() > 20) {
        SmallPanels.get(j).setBounds(j % 5 * 131, 1 + (j / 5 * 125), 120, 110);
      } else {
        SmallPanels.get(j).setBounds(j % 5 * 135, 1 + (j / 5 * 125), 120, 110);
      }
      SmallPanels.get(j).setLayout(new java.awt.BorderLayout(0, 0));
      SmallPanels.get(j).add(SmallLabels.get(j), java.awt.BorderLayout.CENTER);
      SmallPanels.get(j).add(SmallTextFields.get(j), java.awt.BorderLayout.PAGE_END);
      SmallTextFields.get(j).setBorder(null);
      SmallTextFields.get(j).setHorizontalAlignment(SwingConstants.CENTER);
      SmallTextFields.get(j).setEditable(false);
      if (j == 0) {
        SmallLabels.get(0).setDisplayedMnemonic(501);
      } else {
        SmallLabels.get(j).setDisplayedMnemonic(j);
      }
      SmallLabels.get(j).setHorizontalAlignment(SwingConstants.CENTER);
      SmallLabels.get(j).setOpaque(true);
      SmallLabels.get(j).setBackground(new java.awt.Color(244, 244, 244));
    }
  }
}


四、其他


1.其他系统实现


JavaWeb系统系列实现

Java+JSP实现学生图书管理系统

Java+JSP实现学生信息管理系统

Java+JSP实现用户信息管理系统

Java+Servlet+JSP实现航空订票系统

Java+Servlet+JSP实现房屋租赁管理系统

Java+Servlet+JSP实现学生选课管理系统

Java+Servlet+JSP实现学生成绩管理系统

Java+Servlet+JSP实现宠物诊所管理系统

Java+SSM+Easyui实现网上考试系统

Java+Springboot+H-ui实现营销管理系统

Java+Springboot+Mybatis+Bootstrap实现网上商城系统


JavaSwing系统系列实现

Java+Swing实现斗地主游戏

Java+Swing实现图书管理系统

Java+Swing实现医院管理系统

Java+Swing实现仓库管理系统

Java+Swing实现考试管理系统

Java+Swing实现通讯录管理系统

Java+Swing实现停车场管理系统

Java+Swing实现学生信息管理系统

Java+Swing实现学生宿舍管理系统

Java+Swing实现学生选课管理系统

Java+Swing实现学生成绩管理系统

Java+Swing实现学校教材管理系统

Java+Swing实现学校教务管理系统

Java+Swing实现企业人事管理系统

Java+Swing实现电子相册管理系统

Java+Swing实现自助取款机(ATM)系统

Java+Swing实现超市管理系统-TXT存储信息

Java+Swing实现宠物商店管理系统-TXT存储信息


相关文章
|
10天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
35 3
|
14天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
16 1
|
15天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
18天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
20天前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
44 1
|
6月前
|
JavaScript Java 测试技术
基于Java的通讯录管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的通讯录管理系统的设计与实现(源码+lw+部署文档+讲解等)
148 5
|
存储 Java 关系型数据库
Java+Swing实现通讯录管理系统
Java+Swing实现通讯录管理系统
361 0
Java+Swing实现通讯录管理系统
|
设计模式 前端开发 Java
Java通讯录管理系统
使用DAO分层设计模式设计了通讯管理系统 使用了c3p0地址池和dbutils,没有写前端,连接的是mysql数据库,不涉及到太多的技术,仅供入门JDBC的小伙伴参考一下
Java通讯录管理系统
|
Java
【Java】通讯录管理系统小项目
【Java】通讯录管理系统小项目
194 0
【Java】通讯录管理系统小项目
|
5天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。