JPanel und png-Bild

blenderwubbel

Neues Mitglied
Hallo Leute,
ich habe ein Problem, dass schon in diversen Beiträgen im Netz behandelt wurde, aber irgendwie bin ich zu doof es trotzdem zu lösen...🙁
Ich will einfach nur, dass beim Programmstart eine Bilddatei ausgewählt werden kann, bevor sie dann im Fenster dargestellt wird. Angezeigt wird bei mir aber nur so ein komischer schwarzer Winkel (siehe Screenshot im Anhang). Hier der Code mit den 3 Klassen, die das umsetzen sollen, und schonmal vielen vielen Dank.

Nummer 1:
Java:
package image_test;

public class Image_test {


    public static void main(String[] args) {
        gui fenster = new gui("Editor");
	fenster.pack();
	fenster.setVisible(true);
	fenster.setSize(1200,800);
        fenster.repaint();
    }
}

Nummer 2:
Java:
package image_test;


import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.awt.*;
import javax.swing.*;




public class bildflaeche extends JPanel 
{
     private BufferedImage image;
     String bildname;
 
      
     
    public bildflaeche(String bildnameTemp) 
    {
        super();
        bildname=bildnameTemp;
        try 
          {                 
              image = ImageIO.read(new File(bildname));
          } 
       catch (IOException ex) 
          {
            System.out.println("Fehler...");
          }
    }

    
   
    
    @Override
    protected void paintComponent(Graphics g) 
    {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, this);             
    }

}

Nummer 3:
Java:
package image_test;

import javax.swing.*;
import java.awt.*;


public class gui extends JFrame
{
    bildflaeche bild;
    String m_dateiname;
    
    gui (String titel)
    {
        super(titel);
        this.bildLaden();
        bild=new bildflaeche(m_dateiname);
        this.setLayout(new FlowLayout());
        this.add(bild);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
    
        public void bildLaden()
     {
      FileDialog d = new FileDialog(this,"Bilddatei laden...",FileDialog.LOAD);
      d.setVisible(true);
      m_dateiname = d.getFile();
      if(m_dateiname == null)
        return;
     }

    
    
}
 

Anhänge

  • screenshot.jpg
    screenshot.jpg
    21,2 KB · Aufrufe: 34
Moinsen,

ich bin zwar kein pro, aber ich hoffe ich kann dir helfen.

Java:
    bildflaeche bild;
    String m_dateiname;
   
    gui (String titel)
    {
        super(titel);
        this.bildLaden();
        bild=new bildflaeche(m_dateiname);
        this.setLayout(new FlowLayout());
        this.add(bild);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
   
        public void bildLaden()
     {
      FileDialog d = new FileDialog(this,"Bilddatei laden...",FileDialog.LOAD);
      d.setVisible(true);
      m_dateiname = d.getFile();
      if(m_dateiname == null)
        return;
     }

1. dein m_dateiname = d.getFile(); gibt nur den dateinamen aus, woher soll das Bild wissen wo es liegt?
2. du hast nirgens eine größe für das bild festgelegt, sondern nur für den frame.

Meine Lösung:
Java:
import javax.swing.*;
import java.awt.*;

public final class gui extends JFrame {

    private String m_dateiname;

    public gui(String titel) {
        super(titel);
        bildLaden();
        this.setLayout(new BorderLayout());
        this.add(BorderLayout.CENTER, new bildflaeche(m_dateiname));
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public void bildLaden() {
        FileDialog d = new FileDialog(this, "Bilddatei laden...", FileDialog.LOAD);
        d.setVisible(true);
        m_dateiname = d.getDirectory() + d.getFile();
    }
}

ich hoffe ich konnte dir bissle helfen, bei mir läuft es soweit ;-)

MfG
XIIZQ

EDIT: deine Bildfläche würde so aussehen wenn du dein flowformat beibehalten willst ^^ aber nicht dein m_dateiname = d.getDirectory() + d.getFile(); vergessen xD

Java:
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.awt.*;
import javax.swing.*;

public class bildflaeche extends JPanel {

    private BufferedImage image;
    private final String bildname;

    public bildflaeche(String bildnameTemp) {
        bildname = bildnameTemp;
        try {
            image = ImageIO.read(new File(bildname));
            this.setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
        } catch (IOException ex) {
            System.out.println("Fehler..." + ex);
        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, this);
    }
}
 
Zuletzt bearbeitet:

Zurück
Oben