Hallo, habe zur Zeit folgende Aufgabe:
Die Kasse GraphicsComponent soll nun so modifiziert werden, dass folgende Aufgaben erfüllt sind:
1. Es ist eine Methode zu implementieren, die ein Bild von einer URL aus dem Internet lädt und ein BufferedImage
zurückgibt. Eine Methode, die das mit einer lokalen Datei macht ist bereits vorhanden und soll als Vorlage dienen.
2. Mit Hilfe dieser beiden Methoden zum Laden eines Bildes sollen im Konstruktor mindestens ein lokales Bild und
eines aus dem Internet geladen werden.
3. In der Methode paint sollen dann beide Bilder plus mindestens eine Linie und ein Kreis gezeichnet werden.
Habe folgenden Code:
und
Leider lädt er mir bisher die Bilder nicht rein? Wie kann ich das denn machen? Wie bekomme ich es hin das später mindestens eine Linie und ein Kreis hinein gezeichnet werden. Kann man das automatisch machen lassen oder muss ich das dann sleber machen.
THX !!!!!
Die Kasse GraphicsComponent soll nun so modifiziert werden, dass folgende Aufgaben erfüllt sind:
1. Es ist eine Methode zu implementieren, die ein Bild von einer URL aus dem Internet lädt und ein BufferedImage
zurückgibt. Eine Methode, die das mit einer lokalen Datei macht ist bereits vorhanden und soll als Vorlage dienen.
2. Mit Hilfe dieser beiden Methoden zum Laden eines Bildes sollen im Konstruktor mindestens ein lokales Bild und
eines aus dem Internet geladen werden.
3. In der Methode paint sollen dann beide Bilder plus mindestens eine Linie und ein Kreis gezeichnet werden.
Habe folgenden Code:
Code:
package Tut4;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JComponent;
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){
super.paint(g);
/* TODO
* Benutze das Grapphics Objekt g und zeichne mindestens eine Linie, einen
* Kreis.
*/
/* 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.
*/
}
private BufferedImage loadLocalImage(String filename){
try{
return ImageIO.read(new File(filename));
}
catch(IOException e){
System.err.println("Fehler beim laden des lokalen Bildes "
+ filename + ": "+e.getMessage());
return null;
}
}
private BufferedImage loadUrlImage(String filename){
try{
return ImageIO.read(new File(filename));
}
catch(IOException e){
System.err.println("Fehler beim laden des lokalen Bildes "
+ filename + ": "+e.getMessage());
return null;
}
}
/**
* 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.
*/
}
}
und
Code:
package Tut4;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.TimerTask;
import java.util.Timer;
import javax.swing.JButton;
import javax.swing.JFrame;
/**
* Diese Klasse beschreibt den Frame und die Buttons.
*
* @author Christian Wasserthal, Lars Stockmann
*/
public class GraphicsGUI{
/**
* Die main()-Methode erzeugt eine Instanz der Klasse GraphicsGUI und lässt
* sie anzeigen.
* @param args wird ignoriert
*/
public static void main(String[] args){
GraphicsGUI gui = new GraphicsGUI();
gui.show();
}
// Das sind die Variablen einer Instanz
JFrame frame;
JButton buttonStep,buttonAnim;
GraphicsComponent panel;
/**
* Der Constructor initialisiert die Instanzvariablen und startet den
* Timer.
*/
public GraphicsGUI(){
// Wir verwenden ein und den selben Listener für alle auftretenden
// Events. Das werden zum einen GUI-Events sein (also wenn ein Button
// gedrückt wird) und zum anderen der Timer.
GUIAction guiAction = new GUIAction();
// Initialisierung des Panels das ihr Programmieren sollt.
panel = new GraphicsComponent();
// initialisierung der buttons
buttonStep = new JButton("Single Step");
buttonAnim = new JButton("Start Animation");
// hinzufügen des ActionListeners der aufgerufen wird, wenn ein Button
// gedrückt wird.
buttonStep.addActionListener(guiAction);
buttonAnim.addActionListener(guiAction);
// Die Buttons kommen in einen extra Container der im unteren Teil des
// Fensters zu sehen sein wird.
Container cont = new Container();
cont.setLayout(new FlowLayout());
cont.add(buttonStep);
cont.add(buttonAnim);
// initialisierung des Frames
frame = new JFrame("Grafik GUI");
// Konfiguration des Frames
frame.setSize(640,480);
frame.setLocation(100,50);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Beschreibung des Layouts
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(panel,BorderLayout.CENTER);
frame.getContentPane().add(cont,BorderLayout.SOUTH);
// hier erstellen wir einen Timer, der dann alle 20ms die Methode
// "guiAction.run()" aufruft.
Timer t = new Timer();
t.scheduleAtFixedRate(guiAction,20,20);
}
public void show(){
frame.setVisible(true);
}
private class GUIAction extends TimerTask implements ActionListener{
private boolean running;
public GUIAction(){
running=false;
}
// ActionListener
public void actionPerformed(ActionEvent e) {
if (e.getSource() == buttonAnim){
running=!running;
buttonAnim.setText(running?"Stop Animation":"Start Animation");
}
else if (e.getSource() == buttonStep && !running){
panel.animate();
panel.repaint();
}
}
// TimerTask
@Override public void run(){
if (running){
panel.animate();
panel.repaint();
}
}
}
}
Leider lädt er mir bisher die Bilder nicht rein? Wie kann ich das denn machen? Wie bekomme ich es hin das später mindestens eine Linie und ein Kreis hinein gezeichnet werden. Kann man das automatisch machen lassen oder muss ich das dann sleber machen.
THX !!!!!