网络相册(只能本地)

网络相册

登陆注册界面

太久太久没有在c站作总结了,今天来这里补一篇开学老师给我们布置的小任务吧
这里我完成了登录和注册的功能,美中不足是我暂时只学到了IO流,没有办法用数据库来进行存储,这里面无论是关于
图片文件,亦或者照片存储与上传,皆用到的是gui和io流的知识,惭愧,不过后面我还会发表一篇五子棋,用Javafx
写的,也会设计网络编程的知识,用到一些算法

这里我用到了1一张图片作为背景,注意路径

package com01;

import javax.swing.*;
import javax.swing.border.MatteBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;

public class Text extends JFrame {
    public static void main(String[] args) {
        new Text();
    }

    public Text() {

        JPanel jp1,jp2,jp3;
        JLabel jlb1,jlb2;
        JTextField jt1;
        JPasswordField jt2;
        JButton jb1,jb2;
        JFrame t=new JFrame();
        t.setSize(400,250);
        t.setLocationRelativeTo(null);
        t.setDefaultCloseOperation(3);
        t.setTitle("网络相册");
        t.setLayout(new GridLayout(3,1));
        t.setIconImage(new ImageIcon("src\\com02\\bg1.jpg").getImage());

        jp1=new JPanel();
        jp2=new JPanel();
        jp3=new JPanel();


        t.add(jp1);
        t.add(jp2);
        t.add(jp3);
        jlb1=new JLabel("用户名");
        jt1=new JTextField(10);
        jt2=new JPasswordField(10);

        jlb2=new JLabel("密码");
        jb1=new JButton("登录");
        jb2=new JButton("注册");

        jp1.add(jlb1);
        jp1.add(jt1);
        jp2.add(jlb2);
        jp2.add(jt2);
        jp3.add(jb1);
        jp3.add(jb2);

        t.setVisible(true);

        Map<String,String>map=new HashMap<>();
        String line;
        File file=new File("src\\com03");
        try {
            BufferedReader br=new BufferedReader(new FileReader(file));
            while ((line=br.readLine())!=null){
                String[]str=line.split(",");
                map.put(str[0],str[1]);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }


        jb1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                String name=jt1.getText().trim();
                String password=new String(jt2.getPassword()).trim();
                String password2=map.get(name);



                if(jt1.getText().trim().length()==0||new String(jt2.getPassword()).trim().length()==0){
                    //trim():用于删除头尾的空白符
                    JOptionPane.showMessageDialog(null,"用户名密码不允许为空","message",JOptionPane.ERROR_MESSAGE);

                }
                else if(jt1.getText().trim().length() > 11||new String(jt2.getPassword()).trim().length() > 8){
                    JOptionPane.showMessageDialog(null, "用户名或密码超出指定位数","message",JOptionPane.WARNING_MESSAGE);

                }
                else if(map.containsKey(name)&&password.equals(password2)){
                    JOptionPane.showMessageDialog(null, "登录成功");
                    new Main().run( );
                    t.setVisible(false);

                }
                else{
                    JOptionPane.showMessageDialog(null, "用户名或密码错误","message",JOptionPane.QUESTION_MESSAGE);
                }
            }
        });
        jb2.addActionListener(new ActionListener() {
            //设置监听
            @Override
            public void actionPerformed(ActionEvent e) {
                new AdminRegister();
                t.setVisible(false);
            }
        });


    }
}

上面是登陆,下面这个是注册界面

package com01;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class AdminRegister extends JFrame {
    public static void main(String[] args) {
        new AdminRegister();
    }


        JTextField jt;
        JPasswordField jw, jw1;
        Font fw = new Font("宋体", Font.BOLD, 20);
    public AdminRegister() {

            setTitle("注册窗口");
            setBounds(500, 100, 607, 469);
            setLayout(null);
            setDefaultCloseOperation(2);
            setLocationRelativeTo(null);
            setIconImage(new ImageIcon("src\\com02\\bg1.jpg").getImage());


            JLabel jl1 = new JLabel(new ImageIcon("src\\com02\\bg1.jpg"));
            jl1.setBounds(0, 0, 607, 409);
            add(jl1);
            // 在LayeredPane最底层上添加两个带图片的标签,并且label2在label1上方
            this.getLayeredPane().add(jl1, new Integer(Integer.MIN_VALUE));
            // 将内容面板设置为透明,就能够看见添加在LayeredPane上的背景。
            ((JPanel) this.getContentPane()).setOpaque(false);


            JPanel jp1 = new JPanel();
            JLabel jl = new JLabel(" 用 户 名: ");
            jl.setFont(fw);
            jl.setBounds(130, 195, 120, 35);
            add(jl);

            jt = new JTextField();
            jt.setBounds(230, 195, 200, 35);
            add(jt);


            JLabel jl2 = new JLabel("密       码:");
            jl2.setFont(fw);
            jl2.setBounds(130, 245, 120, 35);
            add(jl2);

            jw = new JPasswordField();
            jw.setBounds(230, 245, 200, 35);
            add(jw);


            JLabel jl3 = new JLabel("确认密码:");
            jl3.setFont(fw);
            jl3.setBounds(130, 295, 120, 25);
            add(jl3);

            jw1 = new JPasswordField();
            jw1.setBounds(230, 295, 200, 35);
            add(jw1);

            JButton ju = new JButton("提交");
            ju.setBounds(180, 370, 80, 30);

            ju.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    //e.getActionCommand()得到的是button
                    String buttonname = e.getActionCommand();
                    if (buttonname.equals("提交")) {
                        String str = String.valueOf(jw.getPassword());
                        String str1 = String.valueOf(jw1.getPassword());
                        if (jt.getText().trim().length() == 0 || new String(jw1.getPassword()).trim().length() == 0) {
                            //trim():用于删除头尾的空白符
                            JOptionPane.showMessageDialog(null, "用户名密码不允许为空", "message", JOptionPane.ERROR_MESSAGE);

                        } else if (jt.getText().trim().length() > 11 || new String(jw1.getPassword()).trim().length() > 8) {
                            JOptionPane.showMessageDialog(null, "用户名或密码超出指定位数", "message", JOptionPane.WARNING_MESSAGE);

                        } else {
                            if (str.equals(str1)) {
                                String str2 = jt.getText() + "," + str;
                                File f = new File("src\\com03");
                                //File f=new File("c:/info.txt");
                                try {
                                    if (!f.exists()) {
                                        f.createNewFile();
                                    }

                                    //包装设计模式
                                    FileWriter hu = new FileWriter(f, true);
                                    BufferedWriter buff = new BufferedWriter(hu);
                                    buff.write(str2);
                                    //高效字符输出流的特有方法newline()
                                    buff.newLine();
                                    //将缓冲区中的数据刷到目的地文件中
                                    buff.flush();
                                    buff.close();
                                    JOptionPane.showMessageDialog(null, "写入成功");
                                    new Text();
                                    dispose();

                                } catch (Exception e1) {
                                    e1.printStackTrace();
                                }
                            } else {
                                JOptionPane.showMessageDialog(null, "两次密码不相同,请重新输入密码");
                                jw.setText("");
                                jw1.setText("");
                            }

                        }
                    }
                }
            });

            add(ju);


            JButton ju1 = new JButton("取消");
            ju1.setBounds(300, 370, 80, 30);
            ju1.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent arg0) {
                    jt.setText("");
                    jw.setText("");
                    jw1.setText("");

                }
            });
            add(ju1);
            this.setVisible(true);
        }
    }

关于gui及图片的上传,下载,删除功能,还有一个界面设计

啊这里提醒一下,我的所有图片文件放到src下的com02里
至于账号和密码我存储到com03里了
package com01;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import com01.BackgroundPanel;

public class Main extends JFrame {
    List<BufferedImage> images=new ArrayList<>();
    public  void run()  {
        BackgroundPanel bp=new BackgroundPanel();


        JFrame frame=new JFrame("管理窗口");
        frame.setSize(500,800);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(3);
        frame.setLayout(new BorderLayout());

        frame.getContentPane().add(bp);


        //创建菜单栏
        JMenuBar menuBar=new JMenuBar();
        //创建一级菜单
        JMenu fileMenu=new JMenu("文件");//包含上传和下载
        JMenu viewMenu=new JMenu("浏览");
        //一级菜单加入菜单栏
        menuBar.add(fileMenu);
        menuBar.add(viewMenu);

        //创建一级菜单"文件"的子菜单
        JMenuItem upload =new JMenuItem("上传");
        JMenuItem download =new JMenuItem("下载");
        JMenuItem delet=new JMenuItem("删除");
        JMenuItem vv =new JMenuItem("看一看");
        //子菜单加入一级菜单栏
        fileMenu.add(upload);
        fileMenu.add(download);
        fileMenu.add(delet);
        viewMenu.add(vv);

        delet.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

            }
        });
        vv.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new ImageChanges();

            }
        });
        upload.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Image image=Jc();


            }
        });
        download.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Image image1=Jk();
            }
        });
        delet.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jp();
            }
        });



        frame.setJMenuBar(menuBar);
        frame.setVisible(true);

    }
    //本地文件路径读取
    int m;
    public Image Jc(){
        BufferedImage image=null;
        //点击上传文件的时候都会弹出一个框让我们选择要上传的文件,虽然经常遇到,但却不知道这是哪种组件。在Java里面这种文件导航窗口就是FileChooser啦,
        JFileChooser jFileChooser=new JFileChooser();
        //文件后缀过滤
        FileNameExtensionFilter filter=new FileNameExtensionFilter("图片文件","jpg","png");
        jFileChooser.setFileFilter(filter);
        //显示对话框
        int ret=jFileChooser.showOpenDialog(this);
        if (ret==JFileChooser.APPROVE_OPTION){//获取用户选择结果,常常用于判断文件是否要打开或者保存
            //获取<打开>或保存的文件
            File file=jFileChooser.getSelectedFile();
            System.out.println(file);

            try {
                //读取这个照片文件,用来转换
                //image=ImageIO.read(new File(String.valueOf(file)));
                image=ImageIO.read(new FileInputStream(String.valueOf(file)));

                File outputfile  = new File("D:\\apple\\day_17  network album\\src\\com02\\"+m+".jpg");
                m++;
                ImageIO.write(image,"jpg",outputfile.getAbsoluteFile());
                //System.out.println(String.valueOf(file));
            } catch (IOException e) {
                e.printStackTrace();
            }


        }
        return image;

    }


    //网盘路径读取
    public Image Jk(){
        BufferedImage image=null;
        JFileChooser jFileChooser=new JFileChooser("D:\\apple\\day_17  network album\\src\\com02\\");
        int ret2=jFileChooser.showOpenDialog(this);
        //点击打开(确认或者保存)
        if (ret2==JFileChooser.APPROVE_OPTION){
            File file=jFileChooser.getSelectedFile();
            JFileChooser jf=new JFileChooser();
            int ret3=jf.showOpenDialog(this);
            if (ret3==JFileChooser.APPROVE_OPTION){
                File file1=jf.getSelectedFile();
                try {
                    image=ImageIO.read(new FileInputStream(String.valueOf(file)));
                    ImageIO.write(image,null,file1);

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
        return image;
    }
    public void  jp(){
        JFileChooser jFileChooser=new JFileChooser("D:\\apple\\day_17  network album\\src\\com02\\");
        jFileChooser.setApproveButtonText("删除");
        int ret=jFileChooser.showOpenDialog(this);
        if (ret==JFileChooser.APPROVE_OPTION){
            File file=jFileChooser.getSelectedFile();
            file.delete();
        }

    }




}

package com01;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;


class BackgroundPanel extends JPanel implements ActionListener {
    ImageIcon icon = null;
    JButton b1 = null;
    JFileChooser fileChooser = null;
    String str = null;
    Graphics g = this.getGraphics();

    public BackgroundPanel() {
        b1 = new JButton("打开文件");
        b1.addActionListener(this);
        this.add(b1);
        fileChooser = new JFileChooser("src\\com02");
    }

    public void actionPerformed(ActionEvent e)
    {
        File file = null;
        int result;
        if (e.getActionCommand().equals("打开文件"))
        {
            fileChooser.setApproveButtonText("打开吗");
            fileChooser.setDialogTitle("确定");
            result = fileChooser.showOpenDialog(this);

            if (result == JFileChooser.APPROVE_OPTION)
            {
                str = fileChooser.getSelectedFile().getAbsolutePath();
                System.out.println(str);
                icon = new ImageIcon(str);

                repaint(); //调用paint()
            }

        }
    }

    //覆盖paint()函数
    public void paint(Graphics g) {
        if (icon!=null){
            Image image = icon.getImage();
            g.drawImage(image, 0, 0, icon.getImageObserver());
        }
    }
}


class my extends JFrame {

    BackgroundPanel bp;

    public my() {
        bp = new BackgroundPanel();
        this.getContentPane().add(bp);
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.setSize(500,500);
        this.setVisible(true);
    }
    public static void main(String[] args) {
        new my();
    }
}


关于图片的浏览

package com01;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import javax.swing.JLabel;
import javax.swing.ImageIcon;

public class ImageChanges extends JFrame{
    private JFrame jf;
    private JButton button1;//上一张图片按钮
    private JButton button2;//下一张图片按钮
    private JLabel label;//label用于摆放图片
    private int i=(int)SelectFile.picCount();//设置全局的图片张数变量,默认值为3


    ImageChanges(){

        jf = new JFrame("图片变换");

        label = new JLabel("");
        label.setIcon(new ImageIcon("src\\com02\\bg1.jpg"));//先给label添加一张默认图片,即bg1.jpg
        label.setBounds(0, 0, 800, 800);//设置label的位置和大小
        jf.setBounds(0, 0, 500, 860);//设置jf的位置和大小
        //jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);//设置程序和窗口同步关闭

        jf.setLocationRelativeTo(null);
        jf.add(label,BorderLayout.CENTER);//窗体绝对布局

        File file=new File("src\\com02");
        File[] files=file.listFiles();

        button1 = new JButton("上一张");
        //点击切换上一张图片
        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                button2.setEnabled(true);//将“下一张”按钮设置为有效
                if (i>1)
                i--;//点击上一张,i--
               ImageIcon icon=new ImageIcon(files[i-1].getPath());
                //              等比缩放条件
//              int imgWidth=icon.getIconWidth();
//              int imgHeight=icon.getIconHeight();
//              int conWidth=getWidth();
//              int conHeight=getHeight();
//              int reImgWidth;
//              int reImgHeight;
//              if(imgWidth/imgHeight>=conWidth/conHeight){
//                  if(imgWidth>conWidth){
//                      reImgWidth=conWidth;
//                      reImgHeight=imgHeight*reImgWidth/imgWidth;
//                  }else{
//                      reImgWidth=imgWidth;
//                      reImgHeight=imgHeight;
//                  }
//              }else{
//                  if(imgWidth>conWidth){
//                      reImgHeight=conHeight;
//                      reImgWidth=imgWidth*reImgHeight/imgHeight;
//                  }else{
//                      reImgWidth=imgWidth;
//                      reImgHeight=imgHeight;
//                  }
//              }
//              icon=new ImageIcon(icon.getImage().getScaledInstance(reImgWidth, reImgHeight, Image.SCALE_DEFAULT));
                label.setIcon(icon);//重新为label设置新图片
                if (i == 1){//如果到达第一张,将“上一张按钮设置为失效”

                    button1.setEnabled(false);
                    JOptionPane.showMessageDialog(ImageChanges.this, "当前为第一张图片");//并弹出提示框
                }
            }
        });
        button1.setBounds(0, 780, 93, 30);
        jf.add(button1);


        button2 = new JButton("下一张");
        //点击切换下一张图片
        button2.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                button1.setEnabled(true);//将“上一张”按钮设置为有效
                if (i<SelectFile.picCount())
                    i++;//点击下一张,i++
                ImageIcon icon=new ImageIcon(files[i-1].getPath());
    

                label.setIcon(icon);
                if (i == SelectFile.picCount()){//如果到达最后一张,将“下一张按钮设置为失效”
                    //label.setIcon(new ImageIcon(files[i-1].getPath()));
                    button2.setEnabled(false);//按钮设置为失效状态
                    JOptionPane.showMessageDialog(ImageChanges.this, "当前浏览相册至底部");//并弹出提示框
                }
            }
        });
        button2.setBounds(150, 780, 93, 30);
        jf.add(button2);

        jf.getContentPane().add(label);
        jf.setVisible(true);//设置窗体可见
    }
    public static void main(String[] args) {
        new ImageChanges();
        System.out.println(SelectFile.picCount());
    }
}


com02
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

怎么说呢,感觉自己的美感还需要提升,因为写的仓促,这篇我后面学完别的东西会重新写的
就像余老师说的,提高自己能力的一种方法,就是在自己以往写过的代码上,做出改进和提升

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值