Hallo,
ich bin mir nicht sicher, ob meine Frage hierhin oder in die Kategorie "Anfängerfragen" gehört. Da ich ein Problem mit einem JApplet habe, poste ich einmal hier.
Es geht um Folgendes: Ich habe ien Spiel als Java-Applikation entwickelt und möchte jetzt die Möglichkeit haben, dieses als Applikation und als Applet starten zu können.
Habe hierfür 2 neue Klassen angelegt:
und
in diese beiden Klassen wird jeweil ein Objekt meiner Spieloberfläche (Gui extends JPanel) erzeugt, die wiederum viele andere Klassen braucht (überwiegend JPanels), damit das Spiel so aussieht, wie ich mir das vorstelle.
Dazu habe ich eine Klasse ImageLoader angelegt, die mir die Bilder in Abhängigkeit davon, ob das Applet oder die Applikation läuft aus den richtigen Verzeichnissen ziehen soll. Bin nämlich schon mehrere Tage am recherchieren und habe u. a. herausgefunden, dass man für Applets die Bilder anders laden muss. Der Part für die Applikation sieht im ImageLoader so aus (er funktioniert auch):
alles, was auskommentiert sind Reste von verzweifelten Versuchen, in der Klasse abzufragen, ob die Bilder duchrs Applet oder den JFrame gebraucht werden.
Nach dem ich so viele Postings gelesen habe bin ich ganz verwirrt und weiß garnicht mehr, wie ich mein Vorhaben realisieren sollte. Alles sind nur Bruchstücke und es handelt sich hier um mein erstes Applet. Auch für die Bücher die ich hier rumligen habe ist dieser Fall wohl zu speziell bzw. vielleicht verstehe auch ich die Zusammenhänge nicht ganz richtig...
Ich arbeite im ganzen Spiel wenn ich Bilder brauche mit ImageIcon, da wir in der Vorlesung noch nichts über JAVA 2D gehört haben und dies möglichst deshalb auch nicht verwenden sollten. Wenn ich mal ein Image brauche, hole ich mir dieses über getImage();
Bis jetzt habe ich folgendes unternommen:
Jede Oberfläche, die Bilder benötigt, hat ImageIcons und eine Instanz vom ImageLoader. Über diese rufe ich die Methode createImageIcon auf und übergebe den Namen des Bildes und ggf. den Ordner, wenn es sich um einen Unterordner von "Images/" handelt. (bei Applikation getestet: Das geht so )
Mein AppletSpiel und meine ApplikationSpiel haben kein ImageLoader-Objekt, da ich momentan keinen Grund dafür sehe, dass sie dieses bräuchten. Sie sind nur dazu da, eine Instanz der Oberfläche zu erzeugen. Wie kann man denn abfragen, ob jetzt grad die Methode createImageIcon() vom Applet oder vom JFrame gebraucht wird? Wie macht man die beiden Objekte der Klasse ImageLoader bekannt?
Da das Applet meines Wissens ja kein Recht hat, auf lokale Daten der Festplatte zuzugreifen, muss ich - soviel ich gelesen habe - über die URL rankommen. Deshalb komme ich mit dem auskommentierten Codezeilen auch nicht weiter.
Außerdem wäre in dieser Lösung mit dem pathApplet meiner Meinung nach die Pfadangabe auch statisch und ich hätte sie gerne dynamisch über die URL abgefragt. Aber wie mach ich aus der URL einen Pfad? oder ist das keine gute Idee? Ich weiss es nicht...
Ich habe das Gefühl, dass ich gerade viele verschiedene Dinge durcheinanderwürfle und bitte dies zu entschuldigen. Fühle mich doch noch ganz schön als Anfänger diesbezüglich. Hat jemand von euch einen Tipp, wo ich ansetzten könnte, um mein Vorhaben zu realisieren?
Liebe Grüße
*ggirl*
ich bin mir nicht sicher, ob meine Frage hierhin oder in die Kategorie "Anfängerfragen" gehört. Da ich ein Problem mit einem JApplet habe, poste ich einmal hier.
Es geht um Folgendes: Ich habe ien Spiel als Java-Applikation entwickelt und möchte jetzt die Möglichkeit haben, dieses als Applikation und als Applet starten zu können.
Habe hierfür 2 neue Klassen angelegt:
Code:
public class ApplikationSpiel extends JFrame
und
Code:
public class AppletSpiel extends JApplet
in diese beiden Klassen wird jeweil ein Objekt meiner Spieloberfläche (Gui extends JPanel) erzeugt, die wiederum viele andere Klassen braucht (überwiegend JPanels), damit das Spiel so aussieht, wie ich mir das vorstelle.
Dazu habe ich eine Klasse ImageLoader angelegt, die mir die Bilder in Abhängigkeit davon, ob das Applet oder die Applikation läuft aus den richtigen Verzeichnissen ziehen soll. Bin nämlich schon mehrere Tage am recherchieren und habe u. a. herausgefunden, dass man für Applets die Bilder anders laden muss. Der Part für die Applikation sieht im ImageLoader so aus (er funktioniert auch):
Code:
/*
* ImageLoader.java
*/
import javax.swing.*;
public class ImageLoader {
private String pathApplication;
private String pathApplet;
private String currentPath;
public ImageLoader(){
pathApplication = "images/"; // Speicherort der Bilder im Programmverzeichnis
//pathApplet = ??? über getCodeBase() realisieren versuchen
currentPath = "";
}
// Für alle anderen Klassen, die Bilder haben
public ImageIcon createImageIcon(String pfad){
// auskommentierter Code war einer von mehreren Versuchen, der so auch nicht geht
// if (AppletSpiel){
// currentPath = pathApplet;
// }else{
// currentPath = pathApplication;
//}
return new ImageIcon (pathApplication + pfad);
}
// fuer Klasse ImageButton.java
public ImageIcon createImageIcon(String pfad, String name){
// return new ImageIcon (currentPath + pfad, name);
return new ImageIcon ("images/" + pfad, name);
}
}
alles, was auskommentiert sind Reste von verzweifelten Versuchen, in der Klasse abzufragen, ob die Bilder duchrs Applet oder den JFrame gebraucht werden.
Nach dem ich so viele Postings gelesen habe bin ich ganz verwirrt und weiß garnicht mehr, wie ich mein Vorhaben realisieren sollte. Alles sind nur Bruchstücke und es handelt sich hier um mein erstes Applet. Auch für die Bücher die ich hier rumligen habe ist dieser Fall wohl zu speziell bzw. vielleicht verstehe auch ich die Zusammenhänge nicht ganz richtig...
Ich arbeite im ganzen Spiel wenn ich Bilder brauche mit ImageIcon, da wir in der Vorlesung noch nichts über JAVA 2D gehört haben und dies möglichst deshalb auch nicht verwenden sollten. Wenn ich mal ein Image brauche, hole ich mir dieses über getImage();
Bis jetzt habe ich folgendes unternommen:
Jede Oberfläche, die Bilder benötigt, hat ImageIcons und eine Instanz vom ImageLoader. Über diese rufe ich die Methode createImageIcon auf und übergebe den Namen des Bildes und ggf. den Ordner, wenn es sich um einen Unterordner von "Images/" handelt. (bei Applikation getestet: Das geht so )
Mein AppletSpiel und meine ApplikationSpiel haben kein ImageLoader-Objekt, da ich momentan keinen Grund dafür sehe, dass sie dieses bräuchten. Sie sind nur dazu da, eine Instanz der Oberfläche zu erzeugen. Wie kann man denn abfragen, ob jetzt grad die Methode createImageIcon() vom Applet oder vom JFrame gebraucht wird? Wie macht man die beiden Objekte der Klasse ImageLoader bekannt?
Da das Applet meines Wissens ja kein Recht hat, auf lokale Daten der Festplatte zuzugreifen, muss ich - soviel ich gelesen habe - über die URL rankommen. Deshalb komme ich mit dem auskommentierten Codezeilen auch nicht weiter.
Außerdem wäre in dieser Lösung mit dem pathApplet meiner Meinung nach die Pfadangabe auch statisch und ich hätte sie gerne dynamisch über die URL abgefragt. Aber wie mach ich aus der URL einen Pfad? oder ist das keine gute Idee? Ich weiss es nicht...
Ich habe das Gefühl, dass ich gerade viele verschiedene Dinge durcheinanderwürfle und bitte dies zu entschuldigen. Fühle mich doch noch ganz schön als Anfänger diesbezüglich. Hat jemand von euch einen Tipp, wo ich ansetzten könnte, um mein Vorhaben zu realisieren?
Liebe Grüße
*ggirl*