java实现矩阵雨

编程入门 行业动态 更新时间:2024-10-14 02:18:56

java实现<a href=https://www.elefans.com/category/jswz/34/1769510.html style=矩阵雨"/>

java实现矩阵雨

java 实现矩阵雨


Rain.java

package com.chenlin;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.MemoryImageSource;
import java.util.Random;/*** 矩阵雨** @author chenlin*/
public class Rain extends JDialog implements ActionListener {// 随机数private Random random = new Random();//封装了一个构件的高度和宽度,表明有多少个像素点private Dimension screenSize;/*** JPanel:面板组件,非顶层容器。** 一个界面只可以有一个JFrame窗体组件,但是可以有多个JPanel面板组件,* 而JPanel上也可以使用FlowLayout,BorderLayout,GridLayout等各种布局管理器,* 这样可以组合使用,达到较为复杂的布局效果*/private JPanel graphicsPanel;// 行高,列宽private final static int gap =20;// 存放雨点顶部的位置信息(marginTop)private int[] posArr;// 行数private int lines;//列数private int columns;public Rain(){initComponents();}private void initComponents() {setLayout(new BorderLayout());graphicsPanel = new GraphicsPanel();add(graphicsPanel,BorderLayout.CENTER);// 设置光标不可见// 此类是 Abstract Window Toolkit 的所有实际实现的抽象超类。// Toolkit 的子类被用于将各种组件绑定到特定本机工具包实现。Toolkit defaultToolkit = Toolkit.getDefaultToolkit();/*** Image是一个抽象类,BufferedImage是其实现类,是一个带缓冲区图像类,* 主要作用是将一幅图片加载到内存中(BufferedImage生成的图片在内存里有一个图像缓冲区,* 利用这个缓冲区我们可以很方便地操作这个图片),提供获得绘图对象、图像缩放、选择图像平滑度等功能,* 通常用来做图片大小变换、图片变灰、设置透明不透明等* */Image image = defaultToolkit.createImage(new MemoryImageSource(0,0,null,0,0));//Cursor是封装鼠标光标的位图表示形式的类Cursor invisibleCuror = defaultToolkit.createCustomCursor(image,new Point(0,0),"curor");setCursor(invisibleCuror);//ESC键退出KeyPressListener keyPressListener = new KeyPressListener();this.addKeyListener(keyPressListener);// this.setAlwaysOnTop(true);//去标题栏this.setUndecorated(true);//全屏this.getGraphicsConfiguration().getDevice().setFullScreenWindow(this);this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);setVisible(true);screenSize = Toolkit.getDefaultToolkit().getScreenSize();lines = screenSize.height / gap;columns = screenSize.width / gap;posArr = new int[columns + 1];random = new Random();for (int i = 0; i < posArr.length; i++) {posArr[i] = random.nextInt(lines);}//每秒10帧new Timer(100,this).start();}/*** @return 随机字符*/private char getChr(){return (char) (random.nextInt(94)+33);}@Overridepublic void actionPerformed(ActionEvent e){graphicsPanel.repaint();}private class GraphicsPanel extends JPanel {@Overridepublic void paint(Graphics g){Graphics2D g2d = (Graphics2D) g;g2d.setFont(getFont().deriveFont(Font.BOLD));g2d.setColor(Color.BLACK);g2d.fillRect(0,0,screenSize.width,screenSize.height);// 当前列int currentColumn = 0;for (int x = 0; x < screenSize.width; x +=gap) {int endPos = posArr[currentColumn];g2d.setColor(Color.CYAN);g2d.drawString(String.valueOf(getChr()),x,endPos * gap);int cg = 0;for (int j = endPos-15; j < endPos; j++) {//颜色渐变cg += 20;if(cg> 255){cg = 255;}g2d.setColor(new Color(0,cg,0));g2d.drawString(String.valueOf(getChr()),x,j * gap);}//每放完一帧,当前列上雨点的位置随机下移1-5行posArr[currentColumn] += random.nextInt(5);//当雨点位置你超过屏幕高度是,重新产生一个随机位置if(posArr[currentColumn] * gap > getHeight()){posArr[currentColumn] = random.nextInt(lines);}currentColumn++;}}}private class KeyPressListener extends KeyAdapter {@Overridepublic void keyPressed(KeyEvent e){if(e.getKeyCode()==KeyEvent.VK_ESCAPE){System.exit(0);}}}
}

App.java

public static void main( String[] args ) {// new Rain();//new Login().initUI();}

Login.java

package com.chenlin;/*** 登录** @author chenglin* @date 2019/9/9 15:20*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;//1.定义Login类,
public class Login {// 1.在类中定义初始化界面的方法;public void initUI() {// 3.在initUI方法中,实例化JFrame类的对象。final JFrame frame = new JFrame();// 4.设置窗体对象的属性值:标题、大小、显示位置、关闭操作、布局、禁止调整大小、可见、...frame.setTitle("Login");// 设置窗体的标题frame.setSize(400, 180);// 设置窗体的大小,单位是像素frame.setDefaultCloseOperation(3);// 设置窗体的关闭操作;3表示关闭窗体退出程序;2、1、0frame.setLocationRelativeTo(null);// 设置窗体相对于另一个组件的居中位置,参数null表示窗体相对于屏幕的中央位置frame.setResizable(false);// 设置禁止调整窗体大小// 实例化FlowLayout流式布局类的对象,指定对齐方式为居中对齐,组件之间的间隔为5个像素FlowLayout fl = new FlowLayout(FlowLayout.CENTER, 10, 10);// 实例化流式布局类的对象frame.setLayout(fl);// 5.实例化元素组件对象,将元素组件对象添加到窗体上(组件添加要在窗体可见之前完成)。// 实例化ImageIcon图标类的对象,该对象加载磁盘上的图片文件到内存中,这里的路径要用两个//ImageIcon icon = new ImageIcon("C:\\Desktop\\蓝杰学习\\材料\\爱晚亭.gif");// 用标签来接收图片,实例化JLabel标签对象,该对象显示icon图标//JLabel labIcon = new JLabel(icon);//设置标签大小//labIcon.setSize(30,20);setSize方法只对窗体有效,如果想设置组件的大小只能用//Dimension dim = new Dimension(400,300);//labIcon.setPreferredSize(dim);// 将labIcon标签添加到窗体上//frame.add(labIcon);// 实例化JLabel标签对象,该对象显示"账号:"JLabel labName = new JLabel("账号:");// 将labName标签添加到窗体上frame.add(labName);// 实例化JTextField标签对象final JTextField textName = new JTextField();Dimension dim1 = new Dimension(300,30);//textName.setSize(dim);//setSize这方法只对顶级容器有效,其他组件使用无效。textName.setPreferredSize(dim1);//设置除顶级容器组件其他组件的大小// 将textName标签添加到窗体上frame.add(textName);//实例化JLabel标签对象,该对象显示"密码:"JLabel labpass= new JLabel("密码:");//将labpass标签添加到窗体上frame.add(labpass);//实例化JPasswordFieldfinal JPasswordField textword=new JPasswordField();//设置大小textword.setPreferredSize(dim1);//设置组件大小//添加textword到窗体上frame.add(textword);//实例化JButton组件JButton button=new JButton();//设置按钮的显示内容Dimension dim2 = new Dimension(100,30);button.setText("登录");//设置按钮的大小button.setSize(dim2);frame.add(button);frame.setVisible(true);// 设置窗体为可见button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String trim = textName.getText().trim();String text = textword.getText().trim();if ("root".equals(trim) && "123".equals(text)){System.out.println("账号: "+trim);System.out.println("密码: "+text);System.exit(0);     }}});}}

更多推荐

java实现矩阵雨

本文发布于:2024-03-13 12:53:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1734035.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:矩阵   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!