Thorsten F.: Bild in ein bestimmtes Panel darstellen

Hi,

beschäftige mich grad mal wieder ein bißchen mit Java.
Nun meine Frage: Ich habe ein Frame und in diesem Frame habe ich 2 Panels. Das Frame hat das Borderlayout, also habe ich ein Panel im Westen (Hauptpanel) und das andere (MenuPanel) im Osten.

Wie kann ich das jetzt so machen, dass ein Bild in dem Hauptpanel dargestellt wird?

Wenn ich das so zeichne:
g.drawImage(bild1, 100, 100, 100, 100, this);

Dann sehe ich das Bild auch gar nicht. Das müsste doch normalerweise dann an der Pos. 100,100 gezeichnet werden oder?

Weiß jemand Rat?

Grüße,
Thorsten F.

  1. Hallo,

    Wenn ich das so zeichne:
    g.drawImage(bild1, 100, 100, 100, 100, this);

    Leitest du von Panel ab oder was genau tust du?
    Gib vielleicht einfach mal ein bißchen mehr Code an...

    Dann sehe ich das Bild auch gar nicht. Das müsste doch normalerweise dann an der Pos. 100,100 gezeichnet werden oder?

    Ja. Bist du sicher, daß das Bild bereits geladen wurde? Überprüf mal width
    und height vom Bild. Sind die z.B. -1 wurde das Bild noch nicht geladen.

    Dazu wäre interessant, wie du das Bild lädst. Ich würde die ImageIO-API aus
    dem Package javax.imageio empfehlen. Die macht am wenigsten Stress. Ansonsten
    solltest du in einer Java-Quelle deiner Wahl (z.B. eines der kostenlosen
    Bücher) nachsehen wie man Bilder über den MediaTracker richtig lädt.

    Wenn das Bild korrekt geladen wird, liegt das Problem wohl anderswo. Um
    eine konkrete Aussage treffen zu können, solltest du etwas mehr Code zur
    Verfügung stellen.

    Gruß
    Slyh

    1. Hi,

      hier mal der Code:

      public class Test extends Frame
      {
           Image bild1;
           public static void main( String[] args )
           {
               Test show = new Test();
           }

      public Test()
           {
              bild1 = getToolkit().getImage("test.gif");
              MediaTracker mt = new MediaTracker(this);
              mt.addImage(bild1,0);
              try
              {
                  mt.waitForAll();
              }
              catch (InterruptedException e)
              {
                  //nothing
              }

      JFrame f = new JFrame();
              JPanel mainPanel = new JPanel();
              JPanel menuPanel = new JPanel();

      f.getContentPane().setLayout(new BorderLayout));
              f.getContentPane().add( mainPanel, BorderLayout.WEST );
              f.getContentPane().add( menuPanel, BorderLayout.EAST );

      menuPanel.setVisible(true);
              mainPanel.setVisible(true);
              f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
              f.setSize( 1000,800 );
              mainPanel.setPreferredSize(new Dimension(800, 800));
              menuPanel.setPreferredSize(new Dimension(200, 800));
              mainPanel.setBackground(Color.white);(Color.lightGray);

      f.setTitle("Test");
              f.setVisible( true );
              f.show();
              pack();
          }

      public void paint(Graphics g)
          {
              g.drawImage(bild1,40,40,100,100,this);
          }
      }

      Müsste das Bild jetzt nicht trotzdem an der Pos: 40 40 dargestellt werden?

      Grüße,
      Thorsten F.