Advertisement
Guest User

Untitled

a guest
Mar 17th, 2015
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.70 KB | None | 0 0
  1. package ru.windcorp.game.graphics.elements;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Font;
  5. import java.awt.Frame;
  6. import java.awt.Graphics;
  7. import java.awt.font.FontRenderContext;
  8. import java.awt.font.TextLayout;
  9. import java.awt.geom.AffineTransform;
  10. import java.awt.geom.Rectangle2D;
  11.  
  12. import ru.windcorp.game.GameMain;
  13. import ru.windcorp.game.graphics.FrameHandler;
  14.  
  15. public class InfoBox extends FramedPanel {
  16.  
  17.     private static final long serialVersionUID = 828347285451552842L;
  18.     private String text;
  19.     public static final int OFFSET = 32;
  20.  
  21.     private InfoBox(int startX, int startY, int sizeX, int sizeY, String message) {
  22.         super(startX, startY, sizeX, sizeY);
  23.         this.text = message;
  24.     }
  25.    
  26.     @Override public void paint(Graphics g) {
  27.         g.setColor(new Color(255, 255, 255));
  28.         g.fillRect(startX, startY, sizeX, sizeY);
  29.         g.setColor(new Color(0, 0, 0));
  30.         g.setFont(Font.decode("Consolas"));
  31.         g.drawString(text, super.startX + OFFSET, super.startY + OFFSET);
  32.         /*
  33.         E.g. text input "Line 0\nLine 1"
  34.         Prints as "Line 0Line 1"
  35.         */
  36.         super.drawFrame(g, GameMain.getGlobalObserver()); //Draws the frame (no problem here)
  37.     }
  38.    
  39.     public static InfoBox create(String text) {
  40.         //text may contain some number of '\n's
  41.         Rectangle2D r = new TextLayout(
  42.                 text,
  43.                 Font.decode("Consolas"),
  44.                 new FontRenderContext(new AffineTransform(), true, true)).getBounds();
  45.         Frame f = ((FrameHandler) GameMain.getGraphicsObject()).getFrame();
  46.        
  47.         return new InfoBox(
  48.                 (int) ((f.getWidth() / 2) - ((r.getWidth() + (2 * OFFSET)) / 2)),
  49.                 (int) ((f.getHeight() / 2) - ((r.getHeight() + (2 * OFFSET)) / 2)),
  50.                 (int) r.getWidth() + (2 * OFFSET),
  51.                 (int) r.getHeight() + (2 * OFFSET),
  52.                 text);
  53.     }
  54.  
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement