Hintergrundbild in eine GUI einfügen (Java): Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
(Die Seite wurde neu angelegt: „Kategorie:Java-Codeschnipsel Standard-GUIs sind langweilig? Zur Illustration kann man Swing-GUIs in Java relativ einfach mit einem Hintergrundbild versehen…“)
 
K (L-ectron-X verschob die Seite Hintergrundbild in einem Fenster einfügen (Java) nach Hintergrundbild in eine GUI einfügen (Java), ohne dabei eine Weiterleitung anzulegen)
(kein Unterschied)

Version vom 16. Juni 2018, 18:08 Uhr

Standard-GUIs sind langweilig? Zur Illustration kann man Swing-GUIs in Java relativ einfach mit einem Hintergrundbild versehen.

Folgende Klasse erbt von JPanel und kann daher relativ flexibel in einer GUI eingesetzt werden.

   class BackgroundImagePanel extends JPanel {
      private Image image;
      private boolean fitImage;

      /**
       * Erzeugt ein BackgroundImagePanel, das sich zunächst wie ein "normales" JPanel verhält.
       */
      BackgroundImagePanel() {
         super();
      }

      /**
       * Erzeugt ein BackgroundImagePanel, das sich zunächst wie ein "normales" JPanel verhält.
       *
       * @param layout ein LayoutManager zur Anordnung von GUI-Komponenten für das Panel.
       */
      BackgroundImagePanel(LayoutManager layout) {
         super(layout);
      }

      /**
       * Nimmt das zu zeichnende Bild entgegen und nimmt Einstellungen vor, die das Hintergrundbild im Originalformat
       * und in den Original-Dimensionen ausgeben werden.
       *
       * @param image das zu zeichnende Bild
       */
      void setImage(Image image) {
         this.setImage(image, false);
      }

      /**
       * Nimmt das zu zeichnende Bild entgegen und nimmt Einstellungen vor, die das Hintergrundbild im Originalformat
       * und und in den Original-Dimensionen oder in Format und Dimension des Panels ausgeben werden.
       *
       * @param image das zu zeichnende Bild
       * @param fitImage bei Übergabe von true wird das Bild immer an die Größe des Panel angepasst (kann zu Verzerrung führen),
       * ansonsten wird immer das Original gezeichnet.
       */
      void setImage(Image image, boolean fitImage) {
         this.image = image;
         this.fitImage = fitImage;
         validate();
         repaint();
      }

      /**
       * @see javax.swing.JComponent#getPreferredSize()
       */
      @Override
      public Dimension getPreferredSize() {
         if(image != null) {
            System.out.println(this.getSize());
            return new Dimension(image.getWidth(this), image.getHeight(this));
         }

         return super.getPreferredSize();
      }

      /**
       * @see javax.swing.JComponent#paintComponent(Graphics g)
       */
      @Override
      protected void paintComponent(Graphics g) {
         super.paintComponent(g);
         if(image != null) {
            if(fitImage) {
               Dimension size = this.getSize();
               g.drawImage(image, 0, 0, size.width, size.height, this);
            } else {
               g.drawImage(image, 0, 0, this);
            }
         }
      }
   }