软件编程
位置:首页>> 软件编程>> java编程>> Java实现带GUI的气泡诗词效果

Java实现带GUI的气泡诗词效果

作者:天人合一peng  发布时间:2022-09-12 18:04:48 

标签:Java,气泡,诗词

之前已经为大家介绍过利用Java实现带GUI的气泡诗词特效,本文将为大家介绍另一种方法同样也可以实现气泡诗词的效果。下面是示例代码

import java.awt.*;
import java.awt.event.*;

public class AlgoVisualizer {
   private Object data;
   private Circle[] circles;
   private AlgoFrame frame;
   private boolean isAnmiated = true;

String SuShi_Poem = "夜饮东坡醒复醉,归来仿佛三更。" +
           "家童鼻息已雷鸣。敲门都不应,倚杖听江声。\n" +
           "\n" +
           "长恨此身非我有,何时忘却营营。" +
           "夜阑风静縠纹平。小舟从此逝,江海寄余生。";

public AlgoVisualizer(int sceneWidth, int sceneHeight, int N){

circles = new Circle[N];
       int R = 50;

for(int i = 0; i < N; i++)
       {
           int x = (int)(Math.random()*(sceneWidth-2*R)) + R;
           int y = (int)(Math.random()*(sceneHeight-2*R)) + R;

int vx = (int)(Math.random()*11) - 5;
           int vy = (int)(Math.random()*11) - 5;
           circles[i] = new Circle(x, y, R, vx, vy);

}

EventQueue.invokeLater(()->{
            frame = new AlgoFrame("Welcome-Java", sceneWidth, sceneHeight);
            frame.addKeyListener(new AlgoKeyListener());
           frame.addMouseListener(new AlgoMouseListener());

new Thread(()->{run();}).start();
       });
   }

public AlgoVisualizer(int sceneWidth, int sceneHeight, int N, String centerLael){

Circle.showLabel = true;
       circles = new Circle[N];
       int R = 50;

for(int i = 0; i < N; i++)
       {
           int x = (int)(Math.random()*(sceneWidth-2*R)) + R;
           int y = (int)(Math.random()*(sceneHeight-2*R)) + R;

int vx = (int)(Math.random()*11) - 5;
           int vy = (int)(Math.random()*11) - 5;
//            circles[i] = new Circle(x, y, R, vx, vy);
           circles[i] = new Circle(x, y, R, vx, vy, centerLael.charAt(i) + "");

}

EventQueue.invokeLater(()->{
           frame = new AlgoFrame("Welcome-Java", sceneWidth, sceneHeight);
           frame.addKeyListener(new AlgoKeyListener());
           frame.addMouseListener(new AlgoMouseListener());
           new Thread(()->{
               run();
           }).start();
       });
   }

private void run(){

while(true)
       {
           //绘制当前数据
           frame.render(circles);
           AlgoVisHelper.pause(20);
           //更新数据
           if(isAnmiated)
           {
               for(Circle circle:circles)
                   circle.move(0, 0, frame.getCanvasWidth(), frame.getCanvasHeight());
           }
       }
   }

private class AlgoKeyListener extends KeyAdapter {
       @Override
       public void keyReleased(KeyEvent event)
       {
           // 空格 动画
           if(event.getKeyChar() == ' ')
           {
               isAnmiated = !isAnmiated;
           }

//            +事件加速,跑的更快
           if(event.getKeyChar() == '+')
           {
//                System.out.println("加速++++++");
               for(Circle circle:circles)
               {
                   circle.vx *= 2;
                   circle.vy *= 2;

}

}
//    —减速,慢一点
           if(event.getKeyChar() == '-')
           {
//                System.out.println("加速++++++");
               for(Circle circle:circles)
               {
                   circle.vx /= 2;
                   circle.vy /= 2;

if(circle.vx == 0 && circle.vy == 0)
                   {
                       System.out.println("practice makes perfect!");
                       System.out.println(SuShi_Poem);

circle.vx = (int)(Math.random()*11) - 5;
                       circle.vy = (int)(Math.random()*11) - 5;
                   }
               }

}

}
   }

private class AlgoMouseListener extends MouseAdapter{
       @Override
       public void mousePressed (MouseEvent event)
       {
           event.translatePoint(0,
//                    (frame.getBounds().height -frame.getCanvasHeight()));
                   -(frame.getBounds().height -frame.getCanvasHeight()));

//            System.out.println(event.getPoint());

for(Circle circle:circles)
           {
               if(circle.contain(event.getPoint())){
                   circle.isFilled = !circle.isFilled;
               }

}

}
   }

public static void main(String[] args) {

String poemData = "三月七日沙湖道中遇雨。雨具先去,同行皆狼狈,余独不觉。已而遂晴,故作此词 \n" +
               "莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕? 一蓑烟雨任平生。\n" +
               "料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴。";

int sceneWidth = 800;
       int sceneHeight = 800;
       int N = 15;

//        AlgoVisualizer visualizer = new AlgoVisualizer(sceneWidth, sceneHeight, N);
       AlgoVisualizer visualizer = new AlgoVisualizer(sceneWidth, sceneHeight, N, poemData);

}
}

来源:https://blog.csdn.net/moonlightpeng/article/details/128385910

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com