JAVA表白小程序

如题,微信表白小程序

分析

3.7号,我们是女生节,班级准备给女生点礼物,我的直男想法就想到了抖音那种表白小程序,感觉或许挺好玩的,就开始制作了

  • 制作前先想想用什么语言写比较好.备选项有Python,JAVA,Androidc,c++当时把情况一列我就觉得java的戏比较大.由于本人专业为软件工程,这学期正好开始学习JAVA语言,而且前几天的课就是搭建JAVA环境,所以用户的环境是有的,python我们班也有编译环境,但是据个人了解(或许有误)需要python默认的包好像没法实现,需要使用pygame包.而JAVAswing是默认包,无需另外配置环境了.至于剩余的C和C++个人使用较少,仅对起有一丢丢的理论了解,就不太考虑了,当然,如果忽略苹果电脑,或许c,c++是更好的选择,因为exe文件可直接window运行.Android好像也不错,(其实网页好像也可以?)这是我做完以后才想到了.
  • 决定用JAVA以后,我当然没有立刻开始写…我选择了百度,哈哈哈,大家应该都能找到网上那段都是一样的代码,我把他拿下来改进一下.一下为我改进的代码.
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.*;


public class Girls extends JFrame{
    static int a = 0 ;
    static int exit = 0;
    static String[] str_exit = {"不要走嘛","尝试挽留","真的要走吗?","好吧,点1000次就给你走","骗你的,不忍心的嘻嘻","女生节快乐鸭!"};
    static String[] str = {"<html><font>女生节不是在抵抗长大<br>而是在欣赏成熟的同时<br>依然可以保留女生的天真和活力</font></html>",
            "<html><font>愿你,<br>喜爱甜食,也能吃得起生活的苦。<br></font></html>",
            "<html><font>不畏惧年纪,始终保持少女心。</font></html>",
            "<html><font>向阳而生,被世界温柔以待。</font></html>",
            "<html><font>女生节快乐鸭!!</font></html>"
    };
    public void creatJFrame(String title){
        JFrame jf;
        jf=new JFrame(title);
        Container container=jf.getContentPane();
        JLabel label=new
                JLabel(str[a]);
        label.setFont(new Font("宋体", 1, 25));

        URL url1 = getClass().getResource("a.jpg");
        URL url2 = getClass().getResource("b.jpg");
        URL url3 = getClass().getResource("c.jpg");
        URL url4 = getClass().getResource("d.gif");
        ImageIcon image1 = new ImageIcon("a.jpg");
        image1.setImage(image1.getImage().getScaledInstance(100, 100,Image.SCALE_DEFAULT ));
        ImageIcon image2 = new ImageIcon("b.jpg");
        image2.setImage(image2.getImage().getScaledInstance(100, 100,Image.SCALE_DEFAULT ));
        ImageIcon image3 = new ImageIcon("c.jpg");
        image3.setImage(image3.getImage().getScaledInstance(100, 100,Image.SCALE_DEFAULT ));
        ImageIcon image4 = new ImageIcon("d.gif");
        image4.setImage(image4.getImage().getScaledInstance(100, 100,Image.SCALE_DEFAULT ));
        JLabel label1=new JLabel(image1);
        JLabel label2=new JLabel(image2);
        JLabel label3=new JLabel(image3);
        JLabel label4=new JLabel(image4);



        //设置标签文字居中
        label.setHorizontalAlignment(SwingConstants.CENTER);
        JButton btnY=new JButton("接着看");
        JButton btnN=new JButton("不看了");
        //添加按钮监听事件
        btnN.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                if(Girls.a>=4|| Girls.exit>=13)
                    System.exit(0);
                if (a<5)
                    a++;
                label.setText(str[a]);
            }

        });
        btnY.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                if(Girls.a>=4|| Girls.exit>=13)
                    System.exit(0);
                if (a<5)
                    a++;
                label.setText(str[a]);
            }

        });
        btnN.addMouseListener(new MouseListener(){
            //鼠标点击、移上、移出、松开事件
            @Override
            public void mouseClicked(MouseEvent arg0) {
                // TODO Auto-generated method stub
            }

            @Override
            public void mouseEntered(MouseEvent arg0) {
                // TODO Auto-generated method stub
                btnN.setText("接着看");

            }

            @Override
            public void mouseExited(MouseEvent arg0) {
                // TODO Auto-generated method stub
                btnN.setText("不看了");

            }

            @Override
            public void mousePressed(MouseEvent arg0) {
                // TODO Auto-generated method stub
            }

            @Override
            public void mouseReleased(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

        });
        btnY.setBounds(120, 260, 80, 30);
        btnN.setBounds(380, 260, 80, 30);

        label1.setBounds(25,0,150,150);
        label2.setBounds(300,10,150,150);
        label3.setBounds(500,130,100,100);
        label4.setBounds(0,160,100,100);

        container.add(btnY);
        container.add(btnN);
        container.add(label1);
        container.add(label2);
        container.add(label3);
        container.add(label4);
        container.add(label);


        jf.setSize(600, 400);
        jf.setResizable(false);
        jf.setVisible(true);
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
        jf.addWindowListener(new MyWindowListener());
    }
    public static void main(String[] args) {
        Girls a =new Girls();
        a.creatJFrame("18软工");
    }


}

class MyJDialog extends JDialog{

    public MyJDialog(){

        super(new JFrame(),"18软工",true);
        Container c=getContentPane();
        JLabel label;
        if(Girls.exit<4)
            label=new JLabel(Girls.str_exit[Girls.exit]);
        else if(Girls.exit>=4&& Girls.exit<=10)
            label=new JLabel(1004 - Girls.exit+"");
        else
            label=new JLabel(Girls.str_exit[Girls.exit-7]);
        Girls.exit++;
        label.setHorizontalAlignment(SwingConstants.CENTER);
        JButton btnY=new JButton("接着看");
        JButton btnN=new JButton("不看了");
        //添加按钮监听事件
        btnN.addMouseListener(new MouseListener(){
            //鼠标点击、移上、移出、松开事件
            @Override
            public void mouseClicked(MouseEvent arg0) {
                // TODO Auto-generated method stub
            }

            @Override
            public void mouseEntered(MouseEvent arg0) {
                // TODO Auto-generated method stub
                btnN.setText("接着看");

            }

            @Override
            public void mouseExited(MouseEvent arg0) {
                // TODO Auto-generated method stub
                btnN.setText("不看了");

            }

            @Override
            public void mousePressed(MouseEvent arg0) {
                // TODO Auto-generated method stub
            }

            @Override
            public void mouseReleased(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

        });
        //添加按钮监听事件
        btnN.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                if(Girls.a>=4|| Girls.exit>=13)
                    System.exit(0);
                if (Girls.a<5)
                    Girls.a++;
                label.setText(Girls.str[Girls.a]);
            }

        });
        btnY.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                if(Girls.a>=4|| Girls.exit>=13)
                    System.exit(0);
                if (Girls.a<5)
                    Girls.a++;
                label.setText(Girls.str[Girls.a]);
            }

        });
        btnY.setBounds(30, 100, 80, 30);
        btnN.setBounds(158, 100, 80, 30);
        c.add(btnY);
        c.add(btnN);
        c.add(label);
        setSize(300, 200);
        setResizable(false);
        this.addWindowListener(new MyWindowListener());
        this.setLocationRelativeTo(null);

    }



}
class MyWindowListener extends WindowAdapter{
    //窗体关闭过程中触发函数
    public void windowClosing(WindowEvent e){
        if(Girls.a>=4|| Girls.exit>=13)
            System.exit(0);
        new MyJDialog().setVisible(true);

    }
}

如果觉得太长懒得看的话,直接代码复制粘贴就可以拿去用了,当然字要改一下.讲一下遇到的一些问题已经改进.

  • 首先有一说一,这代码我写得跟屎山一样…一切我都以能实现功能就好.大家不要写我这么烂的代码,重复度挺高的.
  • 说正题,原来的代码点击关闭后,就会弹出一个弹窗,但是弹窗再关闭就全关了,达不到类似整蛊的效果,解决方案也很简单,当点击弹窗的关闭时再弹出一个弹窗,这样就能无限月读了,达到无法关闭程序的效果,然后自己再根据实际情况,设置跳出的条件,System.exit(o)即可关闭程序.
  • 在label中无法\n换行,解决方案时html代码,<br/>即可
  • 字体很丑,样式也很丑,这是我对整个程序最不满意的地方…但是也没太大办法解决,只是尽量没那么丑
  • 图片无法显示的问题,图片显示的话,咱们肯定得用相对路径才能发给别人用,但是这个相对路径,是应该相对.class文件,还跟包名有一定关系,而且包名对后面的编译也会有影响,个人蠢一点的解决方案是,将图片放在.class的路径下,网上比较好的解决方案是url的方法,我也定义在了上面,不过至于为什么最后没用这个,稍后再说(这里有好几个问题待解决)
  • 完成程序后,就应该想怎么发给用户使用,尽量不使用集成开发环境会好点,所以就要手动编译了,首先比较容易解决的是包的问题,直接把开头的包全部删除即可.然后编译即可,但是多次尝试java .class文件,始终无法找到主类,我百思不得其解,后来我通过java GIrls.java的方式编译运行成功了.(具体原因待解)
  • 运行是运行出来了…可惜中文乱码了…而且图片没有显示…中文乱码的问题比较好想到,我的编译器是utf-8编码,但是系统gbk编码,所以乱码是肯定的…所以百度utf-8转gbk的网站,解决√但是,实际上应该有更好的解决方案,就是通过javac 指定编码格式,然后再java 主类这样才是最好的解决方法…可惜不知道为什么我没法运行.class文件,报错找不到主类(待解决)
  • 图片不显示的原因是因为相对路径的原因,cmd进入文件的路径即可.也不是很完美,实际上通过url的方法的话,就没那么多麻烦了,但是也凌晨很晚了,脑子晕乎乎的,转不起来了,只想着可以实现就好.
  • 最后,可以通过cmd运行了以后,用bat来处理一下就更方便了,将源码和图片放入一个文件夹a ,写一个bat文件,cd a java Girls.java.然后再用一个文件夹把这两个都装起来.这样就可以实现点击bat文件运行程序了
  • 发上去给其他同学先试验一下…结果第二天起床反应,找不到主类,然后通过javac 再java的方法可以正常运行…我就更加疑惑了…不过大部分人都是上面的情况,所以也以以上情况改写一bat文件,就完工了.不过最后还是有一点小问题…可以通过关闭cmd窗口直接关闭整个程序…
    总的来说,一路上磕磕碰碰的,暴露了我的很多缺点,学习java时直接跳过了手动编译,使用集成开发环境,导致自己对整个编译过程并不熟悉.第二就是基础知识还是很不扎实,需要多多练习,遇到问题多查查文档.最后感谢看完整篇博客,如果有大神肯指点一下其中遇到的一些疑惑,感激不尽.如果没有指点…那我也还是会自己去那里解决的,嘿嘿

更新:我去尝试修复java 和 javac的问题,重新配置了一遍环境变量解决了.如果可以直接javac的话,可以javac -encoding Utf-8 Girls.java来解决乱码的问题,用url代替直接的相对路径,问题很简单很多

<span style="color:#404040;">1.算法是程序的灵魂,优秀的程序在对海量数据处理时,依然保持高速计算,就需要高效的数据结构和算法支撑。</span><br /><br /><span style="color:#404040;">2.网上数据结构和算法的课程不少,但存在两个问题:</span><br /><br /><span style="color:#404040;">1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了</span><br /><span style="color:#404040;">2)说是讲数据结构和算法,但大多是挂羊头卖狗肉,算法讲的很少。 本课程针对上述问题,有针对性的进行了升级 </span><br /><span style="color:#404040;">3)授课方式采用图解+算法游戏的方式,让课程生动有趣好理解 </span><br /><span style="color:#404040;">4)系统全面的讲解了数据结构和算法, 除常用数据结构和算法外,还包括程序员常用10大算法:二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、马踏棋盘算法。可以解决面试遇到的最短路径、最小生成树、最小连通图、动态规划等问题及衍生出的面试题,让你秒杀其他面试小伙伴</span><br /><br /><span style="color:#404040;">3.如果你不想永远都是代码工人,就需要花时间来研究下数据结构和算法。</span><br /><br /><span style="color:#404040;">教程内容:</span><br /><span style="color:#404040;">本教程是使用Java来讲解数据结构和算法,考虑到数据结构和算法较难,授课采用图解加算法游戏的方式。内容包括: 稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、基数排序(桶排序)、堆排序、排序速度分析、二分查找、插值查找、斐波那契查找、散列、哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)、AVL树、线索二叉树、赫夫曼树、赫夫曼编码、多路查找树(B树B+树和B*树)、图、图的DFS算法和BFS、程序员常用10大算法、二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法马踏棋盘算法。</span><br /><br /><span style="color:#404040;">学习目标:</span><br /><span style="color:#404040;">通过学习,学员能掌握主流数据结构和算法的实现机制,开阔编程思路,提高优化程序的能力。</span>
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页