Announcement

Collapse
No announcement yet.

Hintergrundbild für JPanel

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hintergrundbild für JPanel

    Hallo zusammen <br>
    <br>
    Ich habe meine erste eigene Komponente geschrieben (von JPanel).<br>
    Nun habe ich ein neues Property erstellt um die URL zu einem Bild anzugeben. <br>
    Dieses Bild möchte ich als Hintergrund meines Panel's. <br>
    <br>
    Kann mir jemand sagen wie das geht ? (Wie kann ich ein Image laden und zuweisen ?) <br>
    <br>
    Na wie Ihr sicherlich schon bemerkt habt, übe ich noch nicht sehr lange an JAVA herum. <br>
    Besten Dank für Eure Starthilfe. <br>
    <br>
    Peter

  • #2
    Hi Peter,
    Ich habe in meinen dicken Buch nach gesehen ) (bin selber noch am Anfang)

    Probier doch mal:

    <i>public class ............... <br></i>
    <i> Image background;<br></i>

    <i> public void init() {<br></i>
    <i> background = getImage(getCodeBase(),"<b>Ordner/Bild</b>");<br></i>
    <i>}<br></i>

    <i>public void paint(Graphics g) {<br></i>
    <i> g.drawImage(bachground, 0, 0, this);<br></i>
    <i> }<br></i>
    <i>}<br></i>

    Viel Spaß bein Ausprobieren, ich hoffe ich konnte dir damit helfen.
    Christia

    Comment


    • #3
      Hallo Christian <br>
      <br>
      Also, ich hab versucht Deine Lösung umzusetzen.<br>
      <br>
      Nun um sie umzusetzen muss ich doch eine neue Klasse (von Applets abgeleitet) erstellen.<br>
      Dann füge ich Deinen Code ein. <br>
      Klappt wunderbar.<br>
      <br>
      Und wie Weise ich nun das Bild meiner Komponente, die von JPanel abgeleitet ist zu ?<br>
      Nun ich glaub ich bin unfähig...<br>
      <br>
      Gruss Peter<br&gt

      Comment


      • #4
        Hallo ihr beiden,

        der allgemein übliche Weg einem JPanel ein Bild zuzuweisen führt nicht über JApplet, sondern direkt über JPanel.

        Nachfolgendes JPanel bietet die Möglichkeit ein Bild (gif, jpg, png) entweder einfach, oder als Hintergrund über den gesamten Darstellungsbereich anzuzeigen. Eine detaillierte Erklärung aller benutzten Klassen wäre zu umfangreich, aber ich habe sie alle
        einzeln importiert damit ihr sie in der Java Doku wiederfindet und studieren könnt.

        Die zentrale Methode ist loadTexture(String location). hier kann man einen Pfad zu einem Bild angeben.
        die Methode ist in der Lage Bilder von der Platte, aus einem Jar File sowie übers Netz zu laden. Letzteres habe ich aber nicht ausprobiert!!. Allerdings funktioniert das Laden eines jpgs aus einem Jar File nicht ( Ursache unbekannt). Gifs funktionieren aber sowohl von Platte als auch aus einem jar tadellos.

        Zwei Dinge werden euch wahrscheinlich sonderbar vorkommen: Die Klasse Class und die Zeile Graphics2D g2 = (Graphics2D)g;
        Jedes Objekt wird durch ein Klassenobjekt dargestellt. Dieses Objekt vom Typ Class bietet während der Laufzeit jede Menge Informationen über ein Objekt, z.B. Methoden Variablen auch private usw. Diese Klasse habe ich benutzt um eine URL des zu ladenden Bildes zu bekommen.

        Die Zeile Graphics2D g2 = (Graphics2D)g; macht einen sog. Typecast (Typumwandlung). Es gibt mehrere Methoden in denen Zeichenvorgänge ablaufen. Alle haben aber einen Parameter namens Graphics. Diese Klasse besitzt jede Menge Zeichenoperationen.
        Eine verbesserte Variante ist Graphics2D. Damit kann man tolle grafische Effekte erzielen. Um nun dieses Objekt benutzen zu können, ist der Typecast notwendig. Typecasts braucht man aber auch an anderen Stellen (Siehe hierzu meine Antwort in der Diskussion LinkedList / Collection).

        Die anderen Klassen erforscht ihr am Besten anhand von Tests, Büchern und der Sprachdokumentation. Das hier verwendete jpg
        ist standardmässig in Access 97 dabei. Es geht natürlich auch jedes andere. Legt es dort ab wo die *.class Dateien sind.

        Der Quelltext passt leider nicht in diese Antwort, ich schicke ihn als
        neue Antwort.

        Gruss

        Thomas

        &#10

        Comment


        • #5
          <pre>

          import javax.swing.JPanel;
          import java.awt.MediaTracker;
          import java.awt.image.BufferedImage;
          import java.awt.TexturePaint;
          import java.awt.Graphics;
          import java.awt.Graphics2D;
          import java.awt.RenderingHints;
          import java.awt.Rectangle;
          import java.awt.Dimension;
          import java.awt.Image;
          import java.awt.Toolkit;
          import java.net.URL;

          public class GraphicsPanel extends JPanel
          {
          private MediaTracker tracker = new MediaTracker(this);
          private BufferedImage texture;
          private TexturePaint texturePaint;
          private boolean singlePaint;

          public GraphicsPanel(boolean sp)
          {
          singlePaint = sp;
          texture = loadTexture("GRAY.jpg");
          }

          public void paintComponent(Graphics g)
          {
          super.paintComponent(g);
          Graphics2D g2 = (Graphics2D)g;
          if (texture == null)
          {
          g2.drawString("Keine Grafik gefunden",100,100);
          return;
          }
          if (singlePaint)
          {
          g2.drawImage(texture,null, 100,100);
          }
          else
          {
          Rectangle r = new Rectangle(0, 0, texture.getWidth(), texture.getHeight());
          TexturePaint paint = new TexturePaint(texture, r);
          Dimension dim = getSize();
          g2.setRenderingHint(RenderingHints.KEY_INTERPOLATI ON, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
          g2.setPaint(paint);
          g2.fillRect(0, 0, dim.width, dim.height);
          }
          }

          private BufferedImage loadTexture(String location)
          {
          Image image = null;
          BufferedImage bufferedImage = null;
          Class c = getClass();
          URL url = c.getResource(location);
          if (url == null)
          return null;

          image = Toolkit.getDefaultToolkit().getImage(url);
          if(image != null)
          {
          tracker.addImage(image, 0);
          try
          {
          tracker.waitForAll();
          }
          catch (InterruptedException e)
          {
          tracker.removeImage(image);
          image = null;
          }
          finally
          {

          if(image!=null)
          tracker.removeImage(image);

          if(tracker.isErrorAny())
          image = null;

          if(image!=null)
          {
          if(image.getWidth(null)<0 || image.getHeight(null)<0)
          image = null;
          }
          }
          }

          if(image!=null)
          {
          bufferedImage = new BufferedImage(image.getWidth(null),
          image.getHeight(null),
          BufferedImage.TYPE_INT_RGB);
          Graphics2D g = bufferedImage.createGraphics();
          g.drawImage(image, 0, 0, null);
          g.dispose();
          }
          return bufferedImage;
          }
          }
          </pre&gt

          Comment


          • #6
            Hallo Thomas
            <p>
            Deine Idee hat wunderbar geklappt.
            <p>
            Besten Dank
            <p>
            Pete

            Comment

            Working...
            X