Hintergrundbild in eine GUI einfügen (Java)

Aus Byte-Welt Wiki
Version vom 16. Juni 2018, 18:07 Uhr von L-ectron-X (Diskussion | Beiträge) (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…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springenZur Suche springen

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);
            }
         }
      }
   }