1 19 20 package edu.umd.cs.findbugs.gui2; 21 22 import java.awt.BorderLayout ; 23 import java.awt.Color ; 24 import java.awt.Dimension ; 25 import java.awt.Frame ; 26 import java.awt.Graphics ; 27 import java.awt.Image ; 28 import java.awt.MediaTracker ; 29 import java.awt.Panel ; 30 import java.awt.Toolkit ; 31 import java.util.Random ; 32 33 import javax.imageio.ImageIO ; 34 import javax.swing.BorderFactory ; 35 import javax.swing.ImageIcon ; 36 import javax.swing.JFrame ; 37 import javax.swing.JLabel ; 38 import javax.swing.JPanel ; 39 import javax.swing.JWindow ; 40 41 import java.awt.event.WindowAdapter ; 42 import java.awt.event.WindowEvent ; 43 import java.awt.image.BufferedImage ; 44 import java.io.File ; 45 import java.io.IOException ; 46 47 48 52 53 public class SplashFrame extends JWindow 54 { 55 56 private static Thread animator; 57 58 public SplashFrame() 59 { 60 super(new Frame ()); 61 62 Toolkit toolkit = Toolkit.getDefaultToolkit(); 63 Image image = toolkit.getImage(MainFrame.class.getResource("SplashBug1.png")); 64 Image image2 = toolkit.getImage(MainFrame.class.getResource("SplashBug2B.png")); 65 Image imageReverse = toolkit.getImage(MainFrame.class.getResource("SplashBug1reverse.png")); 66 Image image2Reverse = toolkit.getImage(MainFrame.class.getResource("SplashBug2reverseB.png")); 67 68 JLabel l = new JLabel (new ImageIcon (MainFrame.class.getResource("umdFindbugs.png"))); 72 JPanel p = new JPanel (); 73 Viewer viewer=new Viewer(image,image2,imageReverse,image2Reverse); 74 final JPanel bottom = viewer; 75 p.setBackground(Color.white); 76 bottom.setBackground(Color.white); 77 78 p.add(l); 79 getContentPane().add(p, BorderLayout.CENTER); 80 getContentPane().add(bottom, BorderLayout.SOUTH); 81 pack(); 82 Dimension screenSize = 83 Toolkit.getDefaultToolkit().getScreenSize(); 84 Dimension labelSize = l.getPreferredSize(); 85 p.setPreferredSize(new Dimension (labelSize.width + 50, labelSize.height + 20)); 86 p.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); 87 bottom.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); 88 Dimension panelSize = p.getPreferredSize(); 89 bottom.setPreferredSize(new Dimension (panelSize.width, image.getHeight(null)+2)); 90 91 setLocation(screenSize.width/2 - (panelSize.width/2), 92 screenSize.height/2 - (panelSize.height/2)); 93 94 96 pack(); 97 screenSize = null; 98 labelSize = null; 99 viewer.animate(); 100 101 102 } 103 104 public static void main(String [] args){ 105 (new SplashFrame()).setVisible(true); 106 107 } 108 109 public void setVisible(boolean b){ 110 super.setVisible(b); 111 if(!b) 112 animator.interrupt(); 113 } 114 115 private static class Viewer extends JPanel { 116 private Image image; 117 private Image image2; 118 private Image imageR; 119 private Image image2R; 120 boolean swap=false; 121 boolean reverse=true; 122 int callCount=0; 123 int xpos=0; 124 int ypos=0; 125 int farRight; 126 127 public Viewer(Image i1,Image i2,Image i1r,Image i2r) { 128 image=i1; 129 image2=i2; 130 imageR=i1r; 131 image2R=i2r; 132 MediaTracker mediaTracker = new MediaTracker (this); 133 mediaTracker.addImage(image, 0); 134 mediaTracker.addImage(image2, 1); 135 mediaTracker.addImage(imageR, 2); 136 mediaTracker.addImage(image2R, 3); 137 try 138 { 139 mediaTracker.waitForID(0); 140 mediaTracker.waitForID(1); 141 mediaTracker.waitForID(2); 142 mediaTracker.waitForID(3); 143 } 144 catch (InterruptedException ie) 145 { 146 System.err.println(ie); 147 System.exit(1); 148 } 149 animator = new Thread (new Runnable () 150 { 151 public void run() 152 { 153 int deltaX=1; 154 155 while(true) 156 { 157 if(Thread.currentThread().isInterrupted()) 158 return; 159 160 callCount++; 161 if (callCount==10) 162 { 163 swap=!swap; 164 callCount=0; 165 } 166 167 xpos+=deltaX; 168 try { 169 Thread.sleep(20); 170 } catch (InterruptedException e) { 171 break; 172 } 173 174 if (xpos>Viewer.this.getSize().width-image.getWidth(null)) 175 { 176 deltaX=-1; 177 reverse=!reverse; 178 } 179 if (xpos<0) 180 { 181 deltaX=1; 182 reverse=!reverse; 183 } 184 185 Viewer.this.repaint(); 186 } 187 } 188 }); 189 } 190 191 public void animate() 192 { 193 animator.start(); 194 } 195 196 public void setPreferredSize(Dimension d) 197 { 198 super.setPreferredSize(d); 199 } 200 private Image imageToDraw() 201 { 202 if (swap) 203 { 204 if (!reverse) 205 return image; 206 return imageR; 207 } 208 else 209 { 210 if (!reverse) 211 return image2; 212 return image2R; 213 } 214 } 215 216 public void paint(Graphics graphics) { 217 super.paint(graphics); 218 219 graphics.drawImage(imageToDraw(), xpos, ypos, null); 221 } 222 } 223 } | Popular Tags |