Symbole werden nicht korrekt angezeigt ?

Status
Nicht offen für weitere Antworten.

kaper28

Bekanntes Mitglied
Hallo Kollegen,

Ich muß eine Applikation umbauen zu einem Applet, habe ich auch gemacht. Nur leider die Bilder für die Symbole auf der Symbolleiste werden nicht korrekt angezeigt. Mann hat mir gesagt das ich die gif bilder in dem selben Ordner kopieren soll wo der Quelltext steht , habe ich auch gemacht klappt leider nicht . Bitte um hilfe !!!

[HIGHLIGHT="Java"]import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;

public class MiniMalGui extends JApplet{
//automatisch über Eclipse ergänzt
private static final long serialVersionUID = -2569945475900192306L;

//für die Anzeige
private MiniMalBildPanel mausPanel;
//für die Position
private int xPos, yPos;
//für das Werkzeug
private int werkzeug;

//für die Aktionen
private MeineAktionen beendenAct, rectAct, kreisAct, linieAct, farbeAct;

//eine innere Klasse für die Aktionen
class MeineAktionen extends AbstractAction {
//automatisch über Eclipse ergänzt
private static final long serialVersionUID = 1375901955180795320L;

//der Konstruktor
public MeineAktionen(String text, ImageIcon icon, String beschreibung, KeyStroke shortcut, String actionText) {
//den Konstruktor der übergeordneten Klasse mit dem Text und dem Icon aufrufen
super(text, icon);
//die Beschreibung setzen für den Bildschirmtipp
putValue(SHORT_DESCRIPTION, beschreibung);
//den Shortcut
putValue(ACCELERATOR_KEY, shortcut);
//das ActionCommand
putValue(ACTION_COMMAND_KEY, actionText);
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("beenden"))
beenden();
if (e.getActionCommand().equals("rechteck"))
werkzeug = 1;
if (e.getActionCommand().equals("kreis"))
werkzeug = 2;
if (e.getActionCommand().equals("linie"))
werkzeug = 3;
if (e.getActionCommand().equals("farbauswahl"))
farbDialogZeigen();
}
}

//die innere Klasse für die Mausereignisse
//Sie wird von der Klasse MouseAdapter abgeleitet
//wir brauchen nur das Drücken und Loslassen
class MeinMausListener extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
super.mousePressed(e);
//die Koordinate als Startpunkt speichern
//aber nur, wenn die linke Maustaste gedrückt wurde
if (e.getButton() == MouseEvent.BUTTON1) {
xPos = e.getX();
yPos = e.getY();
}
}

@Override
public void mouseReleased(MouseEvent e) {
super.mouseReleased(e);
//wenn die linke Taste losgelassen wird, zeichnen wir von der alten
//zur aktuellen Position
//je nach Werkzeug wird etwas anders gezeichnet
if (e.getButton() == MouseEvent.BUTTON1) {
//ein Rechteck
if (werkzeug == 1)
mausPanel.rechteck(xPos, yPos, e.getX()-xPos, e.getY() - yPos);
//ein Kreis
if (werkzeug == 2)
mausPanel.kreis(xPos, yPos, e.getX()-xPos, e.getY() - yPos);
//die Linie
if (werkzeug == 3)
mausPanel.linie(xPos, yPos, e.getX(), e.getY());
}
}
}

//der Konstruktor
@Override
public void init() {
//super(titel);
//wir nehmen ein Border-Layout



setLayout(new BorderLayout());
beendenAct = new MeineAktionen("Beenden", null, "", null, "beenden");
rectAct = new MeineAktionen("Rechteck" ,new ImageIcon("rect24.gif"), "Zeichnet ein Rechteck", null, "rechteck");
kreisAct = new MeineAktionen("Kreis", new ImageIcon("circle24.gif"), "Zeichnet einen Kreis", null, "kreis");
linieAct = new MeineAktionen("Linie", new ImageIcon("line24.gif"), "Zeichnet eine Linie", null, "linie");
farbeAct= new MeineAktionen("Farbauswahl", new ImageIcon("color24.gif"), "Öffnet einen Dialog zur Farbauswahl", null, "farbauswahl");

//das Werkzeug ist 1 - also das Rechteck
werkzeug = 1;

//die Menuleiste erstellen und einfügen
menu();

//die Symbolleiste oben einfügen
add(symbolleiste(), BorderLayout.NORTH);
//ein neues Panel mit dem Bild
mausPanel = new MiniMalBildPanel();
//das Panel mit dem Listener verbinden
mausPanel.addMouseListener(new MeinMausListener());
//das Panel in der Mitte einfügen
add(mausPanel, BorderLayout.CENTER);

//anzeigen, Größe setzen und Standard-Verhalten festlegen
setSize(810,680);
//setResizable(false);
//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}

//die Methode erzeugt das Menü
private void menu() {
JMenuBar menue = new JMenuBar();

//das Menü Datei
JMenu dateiMenue = new JMenu("Datei");
//der Eintrag Beenden
JMenuItem dateiBeenden = new JMenuItem();
//die Action setzen
dateiBeenden.setAction(beendenAct);
//den Eintrag hinzufügen
dateiMenue.add(dateiBeenden);

//das gesamte Menü hinzufügen
menue.add(dateiMenue);
this.setJMenuBar(menue);
}

//die Methode erzeugt die Symbolleiste
private JToolBar symbolleiste() {
JToolBar leiste = new JToolBar();

//die Symbole für die Figuren
leiste.add(rectAct);
leiste.add(kreisAct);
leiste.add(linieAct);

leiste.addSeparator();

//für die Farbauswahl
leiste.add(farbeAct);

//die komplette Leiste zurückgeben
return (leiste);


}

//die Methode beendet nach einer Rückfrage die Anwendung
private void beenden() {
if(JOptionPane.showConfirmDialog(this, "Sind Sie sicher?","Anwendung schließen", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
System.exit(0);
}

//die Methode ruft einen Dialog zur Farbauswahl auf und setzt die neue Farbe
//über die Klasse des Panels mit der Grafik
private void farbDialogZeigen() {
//zum Zwischenspeichern
Color tempFarbe;
//den Farbauswahl-Dialog anzeigen und die Auswahl ablegen
tempFarbe = JColorChooser.showDialog(this, "Bitte wählen Sie eine Farbe", Color.BLACK);
//wurde etwas ausgewählt?
//dann die Farbe neu setzen
if (tempFarbe != null)
mausPanel.farbeSetzen(tempFarbe);
}
}[/HIGHLIGHT]
 
Zuletzt bearbeitet von einem Moderator:
Hallo Kaper,

ich gehe mal davon aus das die App vorher schon funktioniert hat. Die Bilddateien müssen da liegen wo am Ende dann auch die Java Class ausgeführt wird.

Gruss
Sebastian
 
Is klar...
Du musst in einem Applet deine Bilder unter Angabe der relativen URL deine Bilder einlesen, sonst versucht das Applet sie im verkehrten Pfad zu finden.

Deshalb den relativen URL mit getCodeBase() besorgen und dann weiter zum Bild durchhangeln.
Auch mal die Forumsuche benutzen, das ist ein oft gefragtes Problem beim Laden von Bildern in Applets.
 
Code:
rectAct = new MeineAktionen("Rechteck" ,new ImageIcon(getCodeBase(),"rect24.gif"), "Zeichnet ein Rechteck", null, "rechteck");

meinst du so aber funktioniert wieder nicht ...
 
Es geht nicht, reicht mir nicht. Wo ist deine Fehlermeldung? Wie soll man da Rückschlüsse auf dein Problem ziehen können? Poste mal den Inhalt der Java-Console!

Forumsuche hatte ich dir empfohlen...
...da findet man unter vielem Anderen sowas: http://www.java-forum.org/deployment/38169-warum-wird-das-bild-nicht-angezeigt.html, http://www.java-forum.org/deployment/66173-problem-beim-deployen-eines-applets.html#post407403

Das was funktioniert sieht so aus:
[HIGHLIGHT="Java"]Image image = getImage(getCodeBase(), "bild.jpg"); //Für Bilder auf Netz-Resourcen

image = getImage(new URL(getCodeBase()+"bild.jpg")); //Für Bilder auf Netz-Resourcen

image = getImage(getClass().getResource("bild.gif")); //Für Bilder in Jar-Dateien

image = getImage(new URL("file:/C:/Java/Applet/bild.jpg")); //Absolute URL auf einem lokalen Datenträger[/HIGHLIGHT]

Probiers mal so.
 
Zuletzt bearbeitet:
Code:
image = getImage(new URL("file:/C:/Java/Applet/bild.jpg")); //Absolute URL auf einem lokalen Datenträger

denn muß ich benutzen das steht fest, nur wie kann man es so einflanzen.

Code:
rectAct = new MeineAktionen("Rechteck" , new ImageIcon ( "rect24.gif"), "Zeichnet ein Rechteck", null, "rechteck");
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben