大耍菜刀(生氣的JLabel)

          JLabel 這么強大的組件 ..大家竟然認為他不帥!!!!!!
          JLabel聽到后非常非常的生氣!!!!!!!!!于是就出現了下面的JLabel
          由于是動態的火焰..只能一張一張截了...你可以自己拿去運行一下看看效果




          下面不廢話了..
          源碼:
          package Flame;

          import java.awt.BorderLayout;
          import java.awt.Color;
          import java.awt.Dimension;
          import java.awt.Font;
          import java.awt.Graphics;
          import java.awt.Image;

          import javax.swing.JButton;
          import javax.swing.JFrame;
          import javax.swing.JLabel;

          public class Flame extends JLabel implements Runnable{
              
          boolean first = true;
              //
              
          int ROWS = 50;

              
          int COLS = 64;

              
          int HIDDEN = 4;

              
          int ROWS_SEED = 4;

              
          int ROWS_RESEED = 48;

              
          int MAX_SEED = 8;

              
          int PALETTE_SIZE = 64;

              
          int COOLING_LIMIT = 32;

              
          int COOLING_ROWS = 42;

              
          int COOLING_FACTOR = 2;

              java.awt.Color palette[] 
          = new java.awt.Color[PALETTE_SIZE];

              
          byte Buffer[], Buffer2[];
              
              String NAME;

              String message, textfont;

              
          int textsize, textX, textY;

              Color textcolor;

              Image offScrImage 
          = null;

              Graphics offScrGC;

              Dimension offScrSize;

              Thread kicker 
          = null;
              
              
          public Flame(String name){
                  
          this.NAME = name;
                  Dimension d 
          = new Dimension(200,72);
                  setPreferredSize(d);
                  setSize(d);
                  setMaximumSize(d);
                  setMinimumSize(d);
                  init();
                  start();
              }

              
              
          public void init() {
                  
                  
          int r, i;

                  COLS 
          = getSize().width;
                  ROWS 
          = getSize().height + HIDDEN;

                  ROWS_RESEED 
          = (int) (getSize().height * 0.99);

                  Buffer 
          = new byte[COLS * ROWS];
                  Buffer2 
          = new byte[COLS * ROWS];
                 
                  
          for (i = 0; i < 16++i)
                      palette[i] 
          = new Color(255,2400);

                  
          for (i = 0; i < 16++i)
                      palette[
          16 + i] = new Color(25516 * i,0);

                  
          for (r = COLS * (ROWS - ROWS_SEED); r < (ROWS * COLS); ++r) {
                      Buffer[r] 
          = (byte) (PALETTE_SIZE-20);
                  }

              }

              
              
          public void MainLoop() {
                  
          int r, a, i;
                  
          for (r = COLS + 1; r < (COLS * (ROWS - 1)) - 1++r) {
                      a 
          = Buffer[r - COLS - 1+ Buffer[r - COLS] + Buffer[r - COLS + 1]
                              
          + Buffer[r - 1+ Buffer[r + 1+ Buffer[r + COLS - 1]
                              
          + Buffer[r + COLS] + Buffer[r + COLS + 1];
                      a 
          = (a >> 3);

                      Buffer2[r] 
          = (byte) (a);
                  }


                  
          for (r = COLS * (ROWS_RESEED); r < COLS * (ROWS); ++r) {
                      a 
          = Buffer2[r];
                      Buffer2[r] 
          = (byte) ((a - (Math.random() * MAX_SEED)) % (PALETTE_SIZE * 1.1));

                  }

                  
          for (i = 0; i < COLS * (ROWS - 1); ++i)
                      Buffer[i] 
          = Buffer2[i + COLS];
              }


              
          public final synchronized void update(Graphics g) {

                  Dimension d 
          = getSize();
                  
          if ((offScrImage == null|| (d.width != offScrSize.width)
                          
          || (d.height != offScrSize.height)) {
                      offScrImage 
          = createImage(d.width, d.height);
                      offScrSize 
          = d;
                      offScrGC 
          = offScrImage.getGraphics();
                  }

                  
          if (offScrGC != null{
                      offScrGC.fillRect(
          00, d.width, d.height);
                      paint(offScrGC);
                      g.drawImage(offScrImage, 
          00null);
                  }

              }


              
          public void paint(Graphics g) {
                  
          super.paint(g);
                  
                  
          if(null == Buffer){
                      
          return;
                  }

                  
          int a;
                  Color c;
                  MainLoop();
                  
          for (int y = 0; y < (ROWS - HIDDEN); ++y)
                      
          for (int x = 0; x < COLS; ++x) {
                          a 
          = Buffer[y * COLS + x];
                          a 
          = a < 0 ? -a : a; //   Patch   nasty   bug     
                          a = a < (PALETTE_SIZE - 1? (a) : (PALETTE_SIZE - 1);
                          c 
          = palette[a];
                          
          try {
                              g.setColor(c);
                              g.drawLine(x, y, x 
          + 1, y);
                          }
           catch (Exception e) {
                          }

                      }

                  g.setFont(
          new Font("宋體",0,18));
                  g.setColor(Color.black);
                  g.drawLine(
          0,getHeight()/2+6,this.getWidth(),getHeight()/2+6);
                  g.drawString(NAME,
          10,getHeight()/2+10);
                  
          try {
                  }
           catch (Exception e) {
                  }

              }


              
          public void start() {
                  
          if (kicker == null{
                      kicker 
          = new Thread(this);
                      kicker.start();
                  }

              }


              
          public void stop() {
                  kicker 
          = null;
              }


              
          public void run() {
                  
          while (kicker != null{
                      
          if(null != this.getGraphics()){
                          update(
          this.getGraphics());
                      }

                      
          try {
                          kicker.sleep(
          30);
                      }
           catch (InterruptedException e) {
                          e.printStackTrace();
                      }

                  }

              }

              
              
          public static void main(String[] args){
                  JFrame f 
          = new JFrame("Flame");
                  f.setLayout(
          new BorderLayout());
                  Flame flame 
          = new Flame("  JLabel很生氣!!!!");
                  flame.setFont(
          new Font("宋體",1,18));
                  f.getContentPane().add(flame,BorderLayout.SOUTH);
                  f.getContentPane().add(
          new JButton(),BorderLayout.CENTER);
                  f.getContentPane().add(
          new JButton("我頂"),BorderLayout.NORTH);
                  f.getContentPane().add(
          new JButton(),BorderLayout.WEST);
                  f.getContentPane().add(
          new JButton(),BorderLayout.EAST);
                  f.setSize(
          200,200);
                  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                  f.setLocationRelativeTo(
          null);
                  f.setVisible(
          true);
              }

          }
           

          posted on 2008-05-23 15:21 相信 閱讀(541) 評論(1)  編輯  收藏 所屬分類: Swing文章

          評論

          # re: 大耍菜刀(生氣的JLabel) 2011-03-24 10:43 venusdrogon

          很強大的說  回復  更多評論   

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          公告

          不顯示applet

          常用鏈接

          留言簿(16)

          我參與的團隊

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          swingchina 專業搞Swing的網站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 青州市| 手游| 安新县| 宁远县| 东乌| 拜城县| 湄潭县| 乐陵市| 江安县| 肇东市| 明光市| 景洪市| 正宁县| 庐江县| 云阳县| 石阡县| 合山市| 锦屏县| 新兴县| 屏山县| 松潘县| 花垣县| 黑龙江省| 崇仁县| 临漳县| 通化市| 绿春县| 莱阳市| 佛教| 卫辉市| 邯郸市| 吴川市| 瑞安市| 汝城县| 普洱| 稷山县| 栾川县| 苍梧县| 井研县| 宕昌县| 裕民县|