Transparentes gif als extra Klasse auf einen JFrame zeichen

Status
Nicht offen für weitere Antworten.

Marce

Mitglied
Also ich habe folgendes Problem:

Ich hab ein JFrame auf dem ich ein Hintergrundbild lade (in der methode paint g.drawImage(...)).
Ich will nun über dieses Hintergundbild eine Figur bewegen, bzw. mehrere. Diese sollen extra Objekte sein (also eine extra Klasse) da ich die z.B. drehen will usw.
Mein Problem ist, dass ich nicht weiß wie ich diese Klasse auf den Frame bekomme - als JPanel oder so geht es nicht, da ich sonst keine Transparenz habe (Hintergundfarbe des Panels).
ICh habe schon einiges hier über die Klasse Canvas gelesen, bin aber nicht dahintergekommen, wie ich diese dann zeichen oder adden kann.

thx im vorraus Marce
 

Marce

Mitglied
hm... ich werde mir den sourcecode mal ansehen - wobei ich wenig Hoffnung hab (bei dem was ich bereits gesehen hab) etwas brauchbares zu finden. Weil das auch recht viel und komplex ist.

Vielleicht nochmal mein Problem spezifiziert: mein Problem ist NICHT das Bild zu bewegen oder so, sondern lediglich wie ich mein Bild auf den Frame bekomme.
also ich habe eine Klasse:

Code:
import java.awt.*;
class Bild extends ????{
    Image i = Toolkit....(bild.bla...);
    public void Bild() {}
    
    public void paint(Graphics g){
        Graphics2D g2d = (Graphics2D) g;
        g2d.translate(15, 15);
        g2d.rotate(4.71);
        g2d.translate( -15, -15);
        g2d.drawImage(i, 0, 0, this);
    }
}

wenn ich diese Klasse nun von JPanel ableite kann ich sie ganz normal mit
Code:
contentPane.add(bild,null);
hinzufügen, dann hab ich aber keine Transparenz.
Von Image kann ich sie nicht ableitren, da diese ja abstrakt definiert ist.

Ich brauche also eine Klasse von der ich meine ableiten kann, die ich dann auf dem Frame hinzufügen oder zeichen kann.

Falls ich in dem Code von dir was finde Poste ich es...
 

Grizzly

Top Contributor
Marce hat gesagt.:
[...]Ich brauche also eine Klasse von der ich meine ableiten kann, die ich dann auf dem Frame hinzufügen oder zeichen kann.[...]
Wenn Du mit der Swing arbeitest, heisst die Komponente Deiner Wahl javax.swing.JComponent. Arbeitest Du jedoch mit der AWT, heisst die Komponente java.awt.Component.
 

Marce

Mitglied
Ja, Danke! Das ist schon ein Stück voran. der erste Teil.

Jetzt habe ich aber immernoch das Problem, dass der Hintergrund meines Objektes weiß ist, bzw. eine Hintergrundfarbe hat. Wenn mein bild z.B. beine Kugel ist , wie bekomme ich es hin, dasss der Hintergrund meines Component auf dem Frame transparent ist?

/e ICh hab mal ein Bild angehängt: (das *.gif ist transparent, das weiße ist der Hintergrund des Component.
bild1.gif
 

Grizzly

Top Contributor
Versuch es mal mit setOpaque(boolean). Wenn Du
Code:
setOpaque(true);
setzt, müsste der Hintergrund Deiner Komponente transparent sein bzw. nicht gezeichnet werden.
 

Marce

Mitglied
Hi,
ich habe nochmal ein Problem:
Ich hab einen Hintergrund, den ich mit drawIMage(...) zeichnen lasse.
Darauf setze ich dann meine Figur. diese wird auch AUF das Bild gezeichnet, wie bei dem Bild oben.
Sobald ich aber
Code:
this.setOpaque(false);
mache Zeichnet er die Figur HINTER den Hintergund.

Weiß jemand eine Lösung?
 

Marce

Mitglied
Klasse von der Figur
Code:
package maedn;

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

public class Figur extends JPanel{
  Image bild;
  Punkt startPos;
  public Figur(int color, Punkt startPos) {
   this.bild = Toolkit.getDefaultToolkit().getImage("figur" + color + ".gif");
   this.startPos = startPos;
   this.setSize(new Dimension(23, 23));
  // this.setOpaque(false);
   this.repaint();
 }

  public void paint(Graphics g){
    super.paint(g);
    g.drawImage(bild, 0, 0, this);
  }
}
Klasse von dem Spielplan
Code:
package maedn;

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

public class Spielplan extends JPanel{
  Image bild = Toolkit.getDefaultToolkit().getImage("bg.gif");
  Punkt[][] spielerPos = new Punkt[4][4];
  Figur[][] spieler = new Figur[4][4];
  Punkt[][] startPos = new Punkt[4][2];

  public Spielplan() {
    this.setSize(new Dimension(400, 400));
    this.setLayout(null);
    this.setBorder(null);

    startPos[0][0] = new Punkt(30,330);
    /* ... */
    startPos[3][1] = new Punkt(15,165);

    // Firuren erzeugen
    for (int i = 0; i < 4; i++){
      /* ... */
    }
    // Figuren setzen
    for (int i = 0; i < 4; i++){
      /* ... */
    }
    for(int i = 0; i < 4; i++) for(int j = 0; j < 4; j++) this.add(spieler[i][j],null);
    this.repaint();
  }

  public void paint(Graphics g){
    super.paint(g);
    g.drawImage(bild, 0, 0, this);
    //for(int i = 0; i < 4; i++) for(int j = 0; j < 4; j++)spieler[i][j].repaint(); <- tut auch nicht
  }

}
 

Grizzly

Top Contributor
Das sieht für mich alles ein bisschen merkwürdig aus. Hier mal mein Vorschlag:
Code:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.io.IOException;

/**
 * Eine Spielfigur.
 */
public class Figur {
	/** Das Bild. */
	private Image bild = null;
	/** Die Position der Figur. */
	private Point position = null;
	
	/**
	 * Erstellt eine Figur mit dem entsprechenden Grafik an der entsprechenden Ausgangsposition.
	 * @param color Die Farbe der Grafik.
	 * @param position Die Position.
	 * @throws IOException Wenn beim Laden des Bildes ein Fehler auftrat.
	 * @throws IllegalArgumentException Wenn die Position <code>null</code> ist.
	 */
	public Figur(int color, Point position) throws IOException {
		super();
		
		String filename;
		
		filename = "figur" + color + ".gif";
		this.bild = Toolkit.getDefaultToolkit().getImage(filename);
		if (this.bild == null) {
			throw new IOException("Couldn't load image '" + filename + "'.");
		}
		if (position == null) {
			throw new IllegalArgumentException("Argument position is null.");
		}
		this.position = position;
	}
	
	/**
	 * Zeichnet die Figur.
	 * @param g Der Grafikkontext.
	 */
	public void paint(Graphics g) {
		g.drawImage(this.bild, position.x, position.y, null);
	}
}

Code:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.io.IOException;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.JComponent;

/**
 * Ein Spielplan.
 */
public class Spielplan extends JComponent {
	/** Die Hintergrundgrafik. */
	private Image bild = null;
	/** Die Spielfiguren. */
	private Vector figuren = new Vector();
	
	/**
	 * Erzeugt einen Spielplan.
	 * @throws IOException Wenn beim Laden der Bilder ein Fehler auftrat.
	 */
	public Spielplan() throws IOException {
		super();
		this.setSize(new Dimension(400, 400));
		
		// Hintergrund laden.
		this.bild = Toolkit.getDefaultToolkit().getImage("bg.gif");
		if (this.bild == null) {
			throw new IOException("Couldn't load image 'bg.gif'.");			
		}
		
		// Figuren erzeugen und setzen.
		for (int i = 0; i < 4; i++){
			this.figuren.addElement(new Figur(i, new Point(i, i)));
		}
	}

	public void paint(Graphics g){
		Iterator iterator;
		
		g.drawImage(this.bild, 0, 0, this);
		iterator = this.figuren.iterator();
		while (iterator.hasNext()) {
			Figur figur = (Figur) iterator.next();
			figur.paint(g);
		}
	}
}
 

Grizzly

Top Contributor
Wenn er die Figuren hinter den Hintergrund zeichnet, woher weisst Du dann, das er die Grafiken überhaupt zeichnet?
 

Grizzly

Top Contributor
Du weist aber schon, dass das Laden der Bilder etwas dauern kann, da Java dies in einem extra Thread macht. Wenn Du sicher sein willst, dass zuerst das Bild geladen wird bevor das Programm weiterläuft, musst Du einen MediaTracker benutzen.
Vielleicht liegt ja das Problem daran.
 

Marce

Mitglied
Jo... ich weiß - hab ich auch schon probiert und daran liegt es nicht - ich hab eigentlich schon alles möglich und auch unmögliche probiert, aber nchts funktioniert - hab auch schon ne andere Entwicklungsumgebung und die neuste jdk runtergeladen. Hat alles nichts gebracht.
 

Marce

Mitglied
OK! Es funktioniert jetzt. ich weiß noch nihct warum... ich poste es sobald ich den Grund gefunden hab...


/e: also allen was ich verändert habe:
- Ich habe den MediaTracker auskommentiert
- alle repaints rausgemacht
- alle super rausgemacht
- und ich habe das Hintergrundbilad auch als Extra Klasse gemacht (extends JComponent)
- ich habe ERST die Figuren zeichnen lassen und DANN den Hintergrund (mir völlig unverständlich)
Bis hier habe ich es aber so weit ich weis davor auch schon alles mal probiert gehabt.

- Ich hab in meinem Frame ein Button erstellt, mit dem ich den Spielplan gerepaintet hatte (weil ich sehen wollte ob es daran liegt, dass das Bild zu lange braucht um geladen zu werden) - und siehe da: die Figuren sind AUF dem Hintergrund.
Button wieder rausgemacht - immernoch!

Also manchmal.......... *%&=$grmpf§&*
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
windl Transparentes / halbtransparentes Fenster AWT, Swing, JavaFX & SWT 1
D Transparentes Hauptfenster Events AWT, Swing, JavaFX & SWT 1
S 2D-Grafik Transparentes JScrollPane AWT, Swing, JavaFX & SWT 0
X Transparentes Overlay AWT, Swing, JavaFX & SWT 3
S Canvas durch transparentes JPanel sichtbar machen AWT, Swing, JavaFX & SWT 2
B Swing Transparentes JPanel, Schrift verschmiert AWT, Swing, JavaFX & SWT 22
S Fix für transparentes Systemtray? AWT, Swing, JavaFX & SWT 6
D Transparentes JFrame mit inhalt AWT, Swing, JavaFX & SWT 7
G SWT Linie unter transparentes Canvas zeichnen AWT, Swing, JavaFX & SWT 4
F Transparentes BufferedImage über BufferedImage AWT, Swing, JavaFX & SWT 12
0 Transparentes Panel ohne Rahmen AWT, Swing, JavaFX & SWT 5
Kr0e Transparentes Image -> getGraphics AWT, Swing, JavaFX & SWT 8
S Transparentes JPanel auf einem JimiCanvas AWT, Swing, JavaFX & SWT 2
G transparentes Fenster + Speicherverbrauch AWT, Swing, JavaFX & SWT 3
K Popup Deluxe (Transparentes Popup)! AWT, Swing, JavaFX & SWT 8
P Transparentes Window/JFrame (mit SkinLF?) AWT, Swing, JavaFX & SWT 10
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
I JAVA 8, JAVAFX und Eclipse – muss Eclipse extra eingerichtet werden? AWT, Swing, JavaFX & SWT 9
gamillton Swing JComboBox mit extra Inhalt + breiteres Popupmenü AWT, Swing, JavaFX & SWT 0
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
T JavaFX Controller im extra Thread AWT, Swing, JavaFX & SWT 0
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
X Swing Panel Extra Klasse & Aufruf über Button AWT, Swing, JavaFX & SWT 18
J JTabbedPane Komponente in extra Fenster anzeigen AWT, Swing, JavaFX & SWT 2
G LookAndFeel in extra Fenster einstellbar AWT, Swing, JavaFX & SWT 2
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
_user_q Versionscode aus build.gradle in Java-Klasse ausgeben lassen AWT, Swing, JavaFX & SWT 14
H MouseAdapter Klasse nutzen wenn eigene Klasse bereits von anderer erbt AWT, Swing, JavaFX & SWT 13
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
T JavaFX TableColumn in separate Klasse auslagern AWT, Swing, JavaFX & SWT 7
Monokuma KeyEvent in der Canvas Klasse AWT, Swing, JavaFX & SWT 0
B Was würden Profis an meiner Klasse verbessern? AWT, Swing, JavaFX & SWT 1
B JavaFX Verständnisfrage EventHandler<ActionEvent> Implementierung in meiner Klasse AWT, Swing, JavaFX & SWT 2
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
S Stream API, Anonyme Klasse AWT, Swing, JavaFX & SWT 8
B JavaFX Von welcher Klasse und zu welchem Zeitpunkt werden Event-Objekte erstellt? AWT, Swing, JavaFX & SWT 3
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
F Jtree aus Klasse mit Arraylisten AWT, Swing, JavaFX & SWT 1
L Javafx Controller Klasse in Maven AWT, Swing, JavaFX & SWT 7
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
ralfb1105 Swing Ausführung einer SwingWorker Klasse stoppen AWT, Swing, JavaFX & SWT 4
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J JFram Location aus Konstruktor einer anderen Klasse auslesen AWT, Swing, JavaFX & SWT 10
J 2D-Grafik Background Image Klasse AWT, Swing, JavaFX & SWT 14
K Frame aus anderer Klasse schließen AWT, Swing, JavaFX & SWT 3
M Eigene Klasse mit Grafikobjekten schreiben AWT, Swing, JavaFX & SWT 4
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
it_is_all Event Handling ActionListener in anderer Klasse klappt nicht AWT, Swing, JavaFX & SWT 4
L JavaFX button über andere Klasse ändern AWT, Swing, JavaFX & SWT 7
K über Button andere Java Klasse aufrufen AWT, Swing, JavaFX & SWT 15
C Nach Aufruf von anderer Klasse streikt Grafik AWT, Swing, JavaFX & SWT 1
S per Button Variableninhalt aus anderer Klasse holen AWT, Swing, JavaFX & SWT 3
F AWT Robot Klasse Screenshot nach Pixelmustern in bestimmten Radius um Bildschirmmittelpunkt absuchen AWT, Swing, JavaFX & SWT 13
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
L JavaFX Verbindung zwischen Beschreibung und Listener (Codebehind Klasse) AWT, Swing, JavaFX & SWT 4
J JTextfield automatisch aus zweiter Klasse aktualisieren AWT, Swing, JavaFX & SWT 5
J JavaFX Tableview Daten hinzufügen aus anderer Klasse AWT, Swing, JavaFX & SWT 7
Ghostman1711 GUI Java von Klasse mit Application Windows anderes Application Window aufrufen AWT, Swing, JavaFX & SWT 6
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
N JavaFX Erweitern der Line(Shape)-Klasse AWT, Swing, JavaFX & SWT 1
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
7 JavaFX Verwendung einer ResizableCanvas-Klasse in fxml-Datei AWT, Swing, JavaFX & SWT 3
A JavaFX Von Klasse auf Controller Inhalt zugreifen AWT, Swing, JavaFX & SWT 9
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
J JavaFX Mehrfache Benutzung von Methoden einer Klasse AWT, Swing, JavaFX & SWT 17
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
N JavaFX GUI Elemente einer anderen (FXML)Klasse ansprechen AWT, Swing, JavaFX & SWT 16
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
B Swing GUI in einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 4
B Klasse mit ArrayList AWT, Swing, JavaFX & SWT 1
G Event Handling Event Handling in eigene Klasse AWT, Swing, JavaFX & SWT 4
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
L JavaFX Verständnisfrage zu JavaFX FXML und Controller-Klasse AWT, Swing, JavaFX & SWT 1
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
F Instanzierung einer inneren Klasse in Klasse eines anderen Packets AWT, Swing, JavaFX & SWT 3
C JavaFX Zugriff auf TextField aus einer anderen Klasse AWT, Swing, JavaFX & SWT 4
A JavaFX Scene Builder eigene Klasse hinzufügen AWT, Swing, JavaFX & SWT 2
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
D JavaFX Controller Klasse splitten? AWT, Swing, JavaFX & SWT 16
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
S ActionListener Klasse aufrufen AWT, Swing, JavaFX & SWT 4
M Swing JTextField getText Mehtode übergeben in eine Klasse zu einer Rechnung AWT, Swing, JavaFX & SWT 1
M Panel in geerbter JFrame Klasse adden AWT, Swing, JavaFX & SWT 4
F JavaFX Zugriff auf Controller Methode von einer normalen Klasse aus AWT, Swing, JavaFX & SWT 4
D AWT Das ganze GUI in eine Klasse? AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben