Hey, hab hier zwar schonmal in einem anderen Teil des Forums die Frage gestellt, denke aber das sie hier passender ist. Und zwar hab ich ein Programm in welches ich ein Bild von meinem Rechner und eines von einer URL hineinladen soll, nebeibei auch noch ein paar Formen und Linien (diese machen mir aber kein Problem). Das Problem liegt daran das mir mein Bild von meinem Rechner gar nicht erst angezeigt wird. Weiss das ich das in der Paint-Methode irgendwie einfügen muss, aber wie. Glaube auch das in meiner Methode private BufferedImage loadLocalImage(){
noch ein Fehler ist. Kann mir vielleicht jemand von euch helfen. Muss den Code für das lokale Reinladen in dieser Methode belassen. Hatte es zwar schon alles direkt bei Paint drinnen, welches auch klappt, aber wie gesagt es soll in die Methode, deshalb hab ich jetzt nochmal einen neuen Weg eingeschlagen.
Danke schonmal!!!
Hier mein Code:
noch ein Fehler ist. Kann mir vielleicht jemand von euch helfen. Muss den Code für das lokale Reinladen in dieser Methode belassen. Hatte es zwar schon alles direkt bei Paint drinnen, welches auch klappt, aber wie gesagt es soll in die Methode, deshalb hab ich jetzt nochmal einen neuen Weg eingeschlagen.
Danke schonmal!!!
Hier mein Code:
Code:
package org.uni_md.pum;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
/**
* Diese Klasse beschreibt das Zeichenpanel.
* Sie erbt von JComponent so das man sie leicht in einen JFrame integrieren
* kann. Ihr sollt nun im wesentlichen die Methode "JComponent.paint(Graphics)"
* überschreiben.
*
* @author Christian Wasserthal, Lars Stockmann, [your name here :)]
*/
public class GraphicsComponent extends JComponent{
// Diese Variable könnt ihr erstmal ignorieren.
private static final long serialVersionUID = 1L;
public final String STR_IMAGE_LOCAL = "my_picture.png";
public final String STR_IMAGE_URL = "http://www.gnu.org/graphics/gnu-head-banner.png";
public GraphicsComponent(){
// Wenn ihr globale Variablen für eure Animation braucht oder Bilder
// laden wollt, solltet ihr das hier tun, damit es nicht bei jedem
// repaint neu geladen werden muss.
}
@Override public void paint(Graphics g){
// Die folgende Zeile ruft die überschriebene Methode auf. Das ist in
// den meisten Fällen Empfehlenswert. In diesem Fall sorgt es zum
// Beispiel dafür, dass die Hintergrundfarbe eurer JComponent sich dem
// Look and Feel (Theme) des Frames anpasst.
super.paint(g);
//Formen(g);
// BufferedImage auto = new BufferedImage(500, 400, BufferedImage.TYPE_INT_ARGB);
// ImageIcon image = new ImageIcon("my_picture.png");
// Graphics2D g2d2 = auto.createGraphics();
// g2d2.drawImage(image.getImage(), 300, 0, this);
// g.drawImage(auto, 0, 0, this);
/* TODO
* Benutze das Grapphics Objekt g und zeichne mindestens eine Linie, einen
* Kreis.
*/
Formen(g);
/* TODO
* Zeichne ein Bild aus dem Internet (z.B. STR_IMAGE_URL).
* Implementiere dazu (in Anlehnung an "loadLocalImage(String)") eine
* Methode zum laden von Bildern aus dem Internet.
*/
}
public void Formen(Graphics g){
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.blue);
g2d.drawArc(150, 100, 60, 60, 45, 360 ); // Kreis
g2d.drawOval(150,200, 60,80); // Kreis
g2d.drawLine(20, 300, 300, 20); // Linie
g2d.drawRoundRect(10, 100, 50, 42, 5, 5); // rundes Rechteck
g2d.fillRect(20, 10, 50, 50); // gefülltes Rechteck
}
private BufferedImage loadLocalImage(){
BufferedImage image = null;
try {
// von file
File file = new File("image.gif");
image = ImageIO.read(file);
// von input stream
InputStream is = new BufferedInputStream(
new FileInputStream("image.gif"));
image = ImageIO.read(is);
} catch (IOException e) {
}
}
/**
* Diese Methode wird von dem Button "Single Step" oder dem Timer
* aufgerufen, der mit "Start Animation" aktiviert wird.
*/
public void animate(){
/* TODO (für überflieger)
*
* Wenn ihr auf "Single Step" oder "Start Animation" klickt, wird jedes
* mal bevor neu gezeichnet wird diese Methode aufgerufen. Diese
* Tatsache könnt ihr benutzen um eine kleine Animation zu realisieren.
*/
}
}