public TextureJButton(String texResource) {
   if (texResource == null) {
     setText("");
     return;
   } else {
     try {
       Input texInput = Input.getInput(texResource);
       texImage = ImageIO.read(texInput.getInputStream());
       int w = texImage.getWidth(this);
       int h = texImage.getHeight(this);
       ratio = w / (double) h;
       texImage = ImageHook.scaleImage(texImage, 100, (int) (100 / ratio));
     } catch (IOException e) {
     }
   }
 }
  /**
   * *******************************************************************************
   * initializeAppearance
   *
   * <p>This method is used to load each texture from disk the first time it is needed. It should
   * only be called once (and the results stored) which is why this method is private.
   * *******************************************************************************
   */
  private static Appearance initializeAppearance(TextureDescriptor td) {
    Appearance app = new Appearance();
    initializeShaders(app, Color.white);

    ImageData id = null;

    try {
      File ff = null;
      switch (td) {
        case WATER:
          ff = AssetManager.getAssetFile("textures/water.jpg");
          break;
        case GRASS:
          ff = AssetManager.getAssetFile("textures/grass.jpg");
          break;
        case BATHROOMTILE:
          ff = AssetManager.getAssetFile("textures/bathroomtile.jpg");
          break;
        case CHECKER:
          ff = AssetManager.getAssetFile("textures/checker.jpg");
          break;
        case CLAY:
          ff = AssetManager.getAssetFile("textures/clay.jpg");
          break;
        case COBBLESTONE:
          ff = AssetManager.getAssetFile("textures/cobblestone.jpg");
          break;
        case DOTS:
          ff = AssetManager.getAssetFile("textures/dots.jpg");
          break;
        case GRID:
          ff = AssetManager.getAssetFile("textures/grid.jpg");
          break;
        case LIGHTHOUSE:
          ff = AssetManager.getAssetFile("textures/lighthouse.jpg");
          break;
        case MARBLE:
          ff = AssetManager.getAssetFile("textures/marble.jpg");
          break;
        case PLAID:
          ff = AssetManager.getAssetFile("textures/plaid.jpg");
          break;
        case STUCCO:
          ff = AssetManager.getAssetFile("textures/stucco.jpg");
          break;
        case SWIRLS:
          ff = AssetManager.getAssetFile("textures/swirls.jpg");
          break;
        case ZIGZAG:
          ff = AssetManager.getAssetFile("textures/zigzag.jpg");
          break;
        case WORLDCUBE0:
          ff = AssetManager.getAssetFile("textures/worldcube0.png");
          break;
        case WORLDCUBE1:
          ff = AssetManager.getAssetFile("textures/worldcube1.png");
          break;
        case WORLDCUBE2:
          ff = AssetManager.getAssetFile("textures/worldcube2.png");
          break;
        case WORLDCUBE3:
          ff = AssetManager.getAssetFile("textures/worldcube3.png");
          break;
        case WORLDCUBE4:
          ff = AssetManager.getAssetFile("textures/worldcube4.png");
          break;
        case WORLDCUBE5:
          ff = AssetManager.getAssetFile("textures/worldcube5.png");
          break;
        case WORLDCUBE6:
          ff = AssetManager.getAssetFile("textures/worldcube6.png");
          break;
        case WORLDCUBE7:
          ff = AssetManager.getAssetFile("textures/worldcube7.png");
          break;
        case WORLDCUBE8:
          ff = AssetManager.getAssetFile("textures/worldcube8.png");
          break;
        case WORLDCUBE9:
          ff = AssetManager.getAssetFile("textures/worldcube9.png");
          break;
        case WORLDCUBE10:
          ff = AssetManager.getAssetFile("textures/worldcube10.png");
          break;
        case WORLDCUBE11:
          ff = AssetManager.getAssetFile("textures/worldcube11.png");
          break;
      }
      id = ImageData.load(Input.getInput(ff));
    } catch (Exception ee) {
      System.err.println("Error: Unable to load texture " + td);
      ee.printStackTrace();
    }

    Texture2D tex = TextureUtility.createTexture(app, POLYGON_SHADER, id);
    tex.setTextureMatrix(MatrixBuilder.euclidean().scale(0.5).getMatrix());

    return app;
  }