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 = {"女生节不是在抵抗长大
而是在欣赏成熟的同时
依然可以保留女生的天真和活力
"
, "愿你,
喜爱甜食,也能吃得起生活的苦。
"
, "不畏惧年纪,始终保持少女心。", "向阳而生,被世界温柔以待。", "女生节快乐鸭!!" }; 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代码,
    即可
  • 字体很丑,样式也很丑,这是我对整个程序最不满意的地方…但是也没太大办法解决,只是尽量没那么丑
  • 图片无法显示的问题,图片显示的话,咱们肯定得用相对路径才能发给别人用,但是这个相对路径,是应该相对.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代替直接的相对路径,问题很简单很多

你可能感兴趣的:(JAVA表白小程序)