Explorar o código

Adds a default Image for Icons that can not be loaded

Default image is a 30x30 pixel icon, Red Cross in a grey Frame.
A failed load will print the Image URL in the error log for better
debugging.
Andreas T. Meyer-Berg %!s(int64=6) %!d(string=hai) anos
pai
achega
6744e2da65
Modificáronse 1 ficheiros con 68 adicións e 35 borrados
  1. 68 35
      src/ui/view/Util.java

+ 68 - 35
src/ui/view/Util.java

@@ -1,36 +1,69 @@
-package ui.view;
-
-import java.awt.Image;
-import java.io.File;
-import java.io.IOException;
-
-import javax.imageio.ImageIO;
-
-public class Util {
-	
-	static Image loadImage(Object origin, String url, int w, int h, int scale){
-		return loadImage(origin,url).getScaledInstance(w, h, scale);
-	}
-	static Image loadImage(Object origin, String url, int w, int h){
-		return loadImage(origin,url,w,h, Image.SCALE_SMOOTH);
-	}
-	static Image loadImage(Object origin, String url){
-		try {
-			return ImageIO.read(loadFile(origin, url));
-		} catch (IOException e) {
-			e.printStackTrace();
-			return null;
-		}
-	}
-	static File loadFile(Object origin, String url){
-		try{
-			return new File(origin.getClass().getResource(url).getFile());
-		}catch(Exception e){
-			boolean rootSymbol=false;//Whether url starts with a / or \
-			switch(url.charAt(0)){
-			case '/':case '\\':rootSymbol=true;
-			}
-			return new File("res"+(rootSymbol?"":"/")+url);
-		}
-	}
+package ui.view;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+import javax.imageio.ImageIO;
+
+public class Util {
+	/**
+	 * 30x30 pixel FileNotFound Icon, which can be shown without using I/O operations
+	 */
+	static private Image defaultImage = createDefaultImage();
+	
+	/**
+	 * creates the default Image 
+	 * @return 30x30 Image, showing a red cross
+	 */
+	private static Image createDefaultImage() {
+		BufferedImage def = new BufferedImage(30,30,BufferedImage.TYPE_BYTE_INDEXED);
+		for(int x = 0; x < 30; x++)
+			for(int y = 0; y < 30; y++){
+				if(x == 29 || y == 29)
+					//Border Bottom/Left -> Light Grey
+					def.setRGB(x, y, 13158600);
+				else if(x == 0 || y == 0)
+					//Border Top/Right -> Dark Grey
+					def.setRGB(x, y, 6316128);
+				else if((x == y || x == 31 - y) && 6 < x && x < 25)
+					//Red Cross in the middle
+					def.setRGB(x, y, 13107200);
+				else //all other Pixels are white
+					def.setRGB(x, y, 16777215);
+				
+			}
+		return def;
+	}
+	
+	static Image loadImage(Object origin, String url, int w, int h, int scale){
+		return loadImage(origin,url).getScaledInstance(w, h, scale);
+	}
+	
+	static Image loadImage(Object origin, String url, int w, int h){
+		return loadImage(origin,url,w,h, Image.SCALE_SMOOTH);
+	}
+	
+	static Image loadImage(Object origin, String url){
+		try {
+			return ImageIO.read(loadFile(origin, url));
+		} catch (IOException e) {
+			System.err.println("Warning: '" + url + "' loading failed!");
+			e.printStackTrace();
+			return defaultImage;
+		}
+	}
+	
+	static File loadFile(Object origin, String url){
+		try{
+			return new File(origin.getClass().getResource(url).getFile());
+		}catch(Exception e){
+			boolean rootSymbol=false;//Whether url starts with a / or \
+			switch(url.charAt(0)){
+			case '/':case '\\':rootSymbol=true;
+			}
+			return new File("res"+(rootSymbol?"":"/")+url);
+		}
+	}
 }