Swing Komponente wird überblendet

Sometimes

Mitglied
Hallo mal wieder.

Ich bin gerade dabei, ein Tower Defense zu erstellen, dabei ergab sich folgendes Problem:

Ich habe einen Hintergrund, und wenn ich dann die Mobs spawnen lasse, werden die vom Hintergrund überblendet.

Kann man also irgendwie die JLabel "auf eine höhere Ebene" setzen?
 
V

vanny

Gast
Es gibt eine LayeredPane, aber bei einem TD-Spiel würde ich lieber auf einem JPanel als Spielfeld selbst zeichnen.
Das mit den JLabel und ImageIcons is doch Murks.

Gruß Vanny
 

Sometimes

Mitglied
Aber geht es nicht noch anders?

Gibt es nicht einen Befehl für die Priorität, also was z.B. über allen anderen Komponenten ist oder was immer unter allen anderen?
 
V

vanny

Gast
Nein, den gibt es nicht.
Java ist ne Programmiersprache und kein Spielesteckbaukasten.
 
Zuletzt bearbeitet von einem Moderator:

Schandro

Top Contributor
Du kannst an den Komponenten die Reihenfolge über die Methode
Code:
setComponentZOrder()
verändern. Und ignorier bitte einfach den letzten Beitrag von vanny, normalerweise wird man hier im Forum nicht so unfreundlich behandelt.

PS: Beispielcode:
Java:
		JFrame window = new JFrame();
		JPanel p = new JPanel();
		p.setLayout(null);

		JButton b1 = new JButton("1");
		b1.setBounds(5, 5, 100, 200);

		JButton b2 = new JButton("2");
		b2.setBounds(50, 50, 100, 100);

		p.add(b1);
		p.add(b2);

		p.setComponentZOrder(b2, 0);

		window.add(p);
		window.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		window.setSize(300, 300);
		window.setVisible(true);
ohne den Aufruf von
Code:
p.setComponentZOrder(b2, 0);
würde der 2. Button hinter dem ersten angezeigt werden.
 
Zuletzt bearbeitet:
V

vanny

Gast
Mal abgesehen davon, dass mir die ZOrder noch nicht bekannt war, ist mein Kommentar nicht von bösartiger Natur(an welcher Stelle überhaupt???:L), sondern durchaus ernst gemeint.
Sollte die Intention des TO darin liegen mal eben ein TD zusammenzufrickeln, ist er bei Java falsch und kann sich das nochmal überlegen.

Aber hey, er kann es natürlich auch ignorieren und hat dann auch nicht mehr davon.

Gruß Vanny
 
Zuletzt bearbeitet von einem Moderator:

Sometimes

Mitglied
Vielen dank.

Aber vanny hat schon irgendwie recht, es gibt nicht jede Sache einen Befehl.

P.S.:mad:vanny:Ich bin neu mit der Spieleprogrammierung, ich möchte erstmal nur den Anfang lernen, später werde ich es effizienter angehen...
 
V

vanny

Gast
...Ich bin neu mit der Spieleprogrammierung, ich möchte erstmal nur den Anfang lernen, später werde ich es effizienter angehen...

Naja anhand dieses Threads kann man sich keinen Reim machen, auf welchem Stand du dich javatechnisch befindest.
Ich glaube aber, dass mir sogar Schandro zustimmen wird, wenn ich sage, ohne handfeste Basic-Kenntnisse und einige Erfahrung im Umgang mit GUIs wird´s schwierig irgendein Spiel zu schreiben(zumind. TD o.ä.).
 

Sometimes

Mitglied
Aber wie geht das mit den JPaneln, also was ist daran besser, wenn du sagst, man sollte es so machen...

Denn JPanel ist aus Container abgeleitet, also wie würdest du es angehen?

(Ich habe nur die objektorientierte Seite gemacht, so Spieleprogrammierung habe ich noch nie gemacht, tut mir Leid^^)
 

Sometimes

Mitglied
So, habe erstmal die ComponentZOrder genommen...(ist am Anfang erstmal einfacher)

Jetzt kommt bei mir ein neues Problem:
Ich möchte, dass wenn ich auf das Gebäude klicke, ein Icon und ein Gitternetz (so ähnlich wie ein Koordinatensystem) erscheint, leider möchte mein Gitternetz nicht mitarbeiten....

Hier mal der Code:

Java:
package ownComponents;

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


public class Koordinatensystem
extends JPanel
{
	private int x;
	private int y;
	private int heigth;
	private int width;
	private int distance;
	
	public Koordinatensystem(int distance)
	{
		x = getX();
		y = getY();
		heigth = getWidth();
		width = getHeight();
		this.distance = distance;
	}
	
	protected void paintComponent(Graphics g)
	{
		System.out.println("hi");
		int i = x;
		int j = y;
		
		while(i + distance <= width) {
			g.drawLine(i, y, i, y + heigth);
			i += distance;
		}
		while(j + distance <= heigth) {
			g.drawLine(x, j, x + width, j);
			j += distance;
		}
	}
}


Und die Hauptklasse, natürlich nur ein Teilcode:

Java:
class Gebäudebau
	implements ActionListener
	{
		private Image icon;
		private int towernumber;
		
		public Gebäudebau(Image icon, int towernumber)
		{
			this.icon = icon;
			this.towernumber = towernumber;
		}
		
		public void actionPerformed(ActionEvent event)
		{
			Koordinatensystem ks = new Koordinatensystem(30);
			JLabel tower = new JLabel(new ImageIcon(icon));
			tower.setBounds((int) MouseInfo.getPointerInfo().getLocation().getX(), (int) MouseInfo.getPointerInfo().getLocation().getY(), 40, 40);
			ks.setBounds(0, 8, 1190, 785);
			con.add(ks);
			con.add(tower);
			con.setComponentZOrder(ks, 0);
			addMouseMotionListener(new moveBuilding(tower));
			addMouseListener(new buildBuilding(ks, towernumber, tower));
			repaint();
		}
	}
 
V

vanny

Gast
Java:
paintComponent(Graphics g){
super.paintComponent(g);
//... dann deine Zeichenaktionen
}

der super-Aufruf ist wichtig.
 

Sometimes

Mitglied
Java:
paintComponent(Graphics g){
super.paintComponent(g);
//... dann deine Zeichenaktionen
}

der super-Aufruf ist wichtig.

So, habe das eingefügt, leider funktioniert es immer noch nicht, aber es werden schon ein paar Komponenten überblendet...

Noch eine Frage:
Kann man auch das Koordinatensystem aus JComponent ableiten?
Wie würde sich der Code dabei ändern, damit der auch funktioniert?^^
 

Schandro

Top Contributor
das Koordinatensystem leitet bereits von JComponent ab. JPanel extended JComponent. Du kannst aber auch direkt von JComponent extenden, da ändert sich imho nichts. Probiers einfach mal aus anstatt in nem Forum zu fragen.
 

Sometimes

Mitglied
Nimm doch einfach ein Gridlayout...

Ich möchte jede Komponente einen Platz geben, also ist das nicht so günstig....

das Koordinatensystem leitet bereits von JComponent ab. JPanel extended JComponent. Du kannst aber auch direkt von JComponent extenden, da ändert sich imho nichts. Probiers einfach mal aus anstatt in nem Forum zu fragen.

Ohhhh, dass habe ich vergessen:autsch:
Aber ich habe es schon mit JComponent ausprobiert, das klappt noch schlechter als mit JPanel...

Die Frage ist nun, warum erscheint das Koordinatensystem nicht, obwohl eigentlich schon die Methode aufgerufen wird....
 

bERt0r

Top Contributor
Tja, wer ohne Layoutmanager arbeiten will muss sich selber um jede Größen- und Positionsangabe sowie -änderung kümmern. Wenn man sich damit voll und ganz auskennt ist man meist fähig sich seinen eigenen Layoutmanager zu schreiben (zumindest wär das weniger Arbeit).
 

Sometimes

Mitglied
Also wäre es besser, die Layoutmanager zu schachteln?

Dann würde ich erstmal sagen, danke an euch beide, hätte aber noch die Frage:

Was sollte ich bei einem Tower Defense beachten, was habt ihr an Tipps für mich, also sowohl für das Tower Defense selbst als auch sowas, wie es bei der Grafik am besten geht? (usw...^^)
 
T

Trollolol

Gast
Was sollte ich bei einem Tower Defense beachten, was habt ihr an Tipps für mich, also sowohl für das Tower Defense selbst als auch sowas, wie es bei der Grafik am besten geht? (usw...^^)
Mach ne Warcraft 3 Custom Map.
 

Sometimes

Mitglied
Zitat:
Was sollte ich bei einem Tower Defense beachten, was habt ihr an Tipps für mich, also sowohl für das Tower Defense selbst als auch sowas, wie es bei der Grafik am besten geht? (usw...^^)

Mach ne Warcraft 3 Custom Map.

1.:Ich habe nach dem grafischen gefragt, also z.B. Tipps für den Layoutmanager und auf der spielerischen Seite, wie man es am geschicktesten macht...

2.:Ich habe nicht Warcraft 3...

3.:Ich habe schon mal ein Tower Defense gemacht in Starcraft 2 und weiß auch, was es ist, bei mir kommt aber die Frage nach Tipps auf, damit ich es möglichst geschickt mache, da es hier ziemlich viele Experten gibt und das mein erstes Spiel ist... ;)
 

Sometimes

Mitglied
So, ich habe mal wieder ein Problem, dieses Mal wird ein Bild nicht angezeigt, ich weiß nicht, warum...

(Ich bin noch kein Experte mit Panels und paint, also weiß ich noch nicht viel darüber...)

Java:
package Panel;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class StartPanel extends JPanel
{
	private Image temp;
	private boolean done = false;
	
	public StartPanel(JFrame Hauptfenster, JPanel graphics)
	{
		graphics.add(this);
		Hauptfenster.setBounds(500, 300, 350, 200);
		Hauptfenster.setVisible(true);
		doInitializations(graphics);
	}

	private void doInitializations(JPanel graphics)
	{
		temp = Toolkit.getDefaultToolkit().getImage("bin/resources/textures/menuitem/button01.jpeg");
		System.out.println("hii");
		done = true;
	}
	
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		if(done)
		{
                        //hier
			g.drawImage(temp, 120, 30, null);
			System.out.println("hi");
		}
		repaint();
	}
}

Java:
import javax.swing.JFrame;
import javax.swing.JPanel;

import Panel.StartPanel;

public class MainClass
{
	private static JFrame Hauptfenster;
	
	public static void main(String args[])
	{
		Hauptfenster = new JFrame("Time Tower Defense");
		JPanel graphics = new JPanel();
		Hauptfenster.getContentPane().add(graphics);
		StartPanel panel = new StartPanel(Hauptfenster, graphics);
		Hauptfenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}
 

Sometimes

Mitglied
So, weil ich durch mein Unternehmen nichts schaffen konnte, da ich nicht wirklich wusste, wie man so etwas angeht, habe ich mir dieses Tutorial angeguckt (hier).

Dabei wollte ich den Code komplett kopieren (da der Macher des Videos den Code nicht zum Download zur Verfügung stellt) und habe versucht, ihn erstmal 1:1 zu kopieren...

Nun tritt aber an der Stelle hier mit den Mobs ein Problem auf:


Java:
public void spawnMobs(int mobID)
	{
		for(y = 0; y < Screen.room.block.length; y++)
			if(Screen.room.block[y][0].groundID == Value.groundRoad)
			{
				setBounds(Screen.room.block[y][0].x, Screen.room.block[y][0].y, mobSize, mobSize);
				xC = 0;
				yC = y;
			}
		
		this.mobID = mobID;
		
		inGame = true;
	}

Das Problem ist, dass yC einen Wert von 52 annimmt und nicht den Wert von 1 oder 2 (weiß den gerade nicht so genau).

Woran könnte das liegen?


P.S.:Ich kopiere ihn komplett ab, weil 1. ich nicht so gut Englisch verstehe und 2. ihn danach sehr genau angucke, wie er das gemacht hat (analysieren) und dann gerne die Erkenntnisse in mein eigenes TD übernehmen würde...
 

bERt0r

Top Contributor
Das sind ja gleich 4 Änderungen von globalen Variablen in einer Methode. Ein Codereviewerüberraschungsei...
Nein, ehrlich. Woher sollen wir wissen wie diese Methode funktionieren soll? Besonders wenn die so schlecht geschrieben ist, mit globalen Variablen kann man da gar nix rauslesen. Da muss man mühsam durch den ganzen Code wühlen.

Der Author von dem Tutorial schreibt:
The reason I don't follow the basic Java rules is because I'm trying to give beginners and people with no experience what so ever an easier time creating games. Hope it's too much of a problem for most people! :D

Am besten wäre es wohl wenn du ihn direkt fragst. Und richte ihm schöne Grüße von mir und den Java Konventionen aus :)
 
Zuletzt bearbeitet:

Sometimes

Mitglied
Aber ich weiß nur nicht, warum dann yC 52 komischerweise ist...
Ich könnte es auch manuell definieren, aber so wäre es erstmal besser...
Wenn ich sie mir angucken würde, würde ich auch auf 1 kommen... -.-

Und der Grund, warum ich ihn nicht fragen kann, ist, weil ich mich nicht auf YouTube anmelden darf... :(

Ich habe das in der Hoffnung gepostet, dass jemand das Tutorial durchgearbeitet hat und auch hier angemeldet ist...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Swing Komponente wird unpassend angepasst in der Größe AWT, Swing, JavaFX & SWT 35
J Komponente wird manchmal falsch gezeichnet AWT, Swing, JavaFX & SWT 0
T Komponente wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
A Swing GlassPane Cursor wird bei fremder Komponente nicht angezeigt AWT, Swing, JavaFX & SWT 3
H Swing Eigene Komponente wird nur halb oder komisch angezeigt AWT, Swing, JavaFX & SWT 3
Ä Graphics-Komponente auf JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
Maxim6394 JavaFX Scene Builder - Crash bei eigener Komponente AWT, Swing, JavaFX & SWT 2
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
temi JavaFX "Frames" in JavaFx - passende Komponente? AWT, Swing, JavaFX & SWT 13
M4cM4rco0707 JavaFX Custom-Komponente mit Custom-Controller AWT, Swing, JavaFX & SWT 3
R Swing Komponente im JFrame überschreinen sich AWT, Swing, JavaFX & SWT 7
Q-bert Dynamische Komponente erzeugen AWT, Swing, JavaFX & SWT 6
G vorgefertigte Buttons oder neue Komponente mit MouseListener? AWT, Swing, JavaFX & SWT 0
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
Tom299 JavaFX Ähnliche Komponente wie der VB6 Frame? AWT, Swing, JavaFX & SWT 2
M JavaFX Progressbar bar und track Komponente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
Tort-E JavaFX Daten an WebView Komponente AWT, Swing, JavaFX & SWT 1
G JPanel komponente Löschen AWT, Swing, JavaFX & SWT 7
T Swing Index für Komponente in JPanel? AWT, Swing, JavaFX & SWT 6
T Swing Größe einer Komponente in einem BoxLayout / FlowLayout festlegen AWT, Swing, JavaFX & SWT 7
G Border der Komponente bei Table CellRenderer überschreiben AWT, Swing, JavaFX & SWT 0
P Warten auf komponente AWT, Swing, JavaFX & SWT 2
U LookAndFeel für eine Komponente AWT, Swing, JavaFX & SWT 2
E Mit Netbeans von einer Form auf eine Komponente einer anderen Form zugreifen AWT, Swing, JavaFX & SWT 2
G Zeichnen auf eine schwergewichtige Komponente? AWT, Swing, JavaFX & SWT 0
A Swing Komponente mehrseitig ausdrucken AWT, Swing, JavaFX & SWT 2
V Fertige Komponente zum Anzeigen mehrerer Bilder AWT, Swing, JavaFX & SWT 5
B Swing Komponente an Position eines Objektes ausgeben lassen AWT, Swing, JavaFX & SWT 3
R Swing Komponente austauschen AWT, Swing, JavaFX & SWT 2
M JApplet mit Java 3D Komponente AWT, Swing, JavaFX & SWT 6
M Swing JMenu verdeckt durch Komponente (aber kein AWT und Swing mix!?) AWT, Swing, JavaFX & SWT 3
N Swing Java Komponente zur Darstellung von klickbaren Links, die Java Funktionen ausführen können AWT, Swing, JavaFX & SWT 2
S Swing Eigene Komponente (JPanel) soll ChangeEvents verteilen AWT, Swing, JavaFX & SWT 12
S Spezielle komponente aktualisieren AWT, Swing, JavaFX & SWT 9
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
1 Swing Spaltenbreite and CellEditor- Komponente anpassen AWT, Swing, JavaFX & SWT 4
R Komponente wieder entfernen AWT, Swing, JavaFX & SWT 13
B Komponente "sauber" entfernen(JToolBar) AWT, Swing, JavaFX & SWT 4
xehpuk Swing Komponente in Graustufen zeichnen AWT, Swing, JavaFX & SWT 2
darekkay Swing Komponente zur Laufzeit neuinitialisieren AWT, Swing, JavaFX & SWT 6
K Swing Komponente als Bild speichern AWT, Swing, JavaFX & SWT 11
F visuelle Komponente AWT, Swing, JavaFX & SWT 3
padde479 Komponente gesucht AWT, Swing, JavaFX & SWT 2
A Swing Komponente für Swing und JSF durch MVC AWT, Swing, JavaFX & SWT 5
P Swing Eigene Komponente Entwickeln - erben von JComponent oder JPanel? AWT, Swing, JavaFX & SWT 5
A Swing suche OpenSource Date(Time)Picker Komponente AWT, Swing, JavaFX & SWT 9
N Swing außerhalb des Hauptframe Komponente/Frame öffnen AWT, Swing, JavaFX & SWT 2
S Feste Position einer Komponente auf Glasspane AWT, Swing, JavaFX & SWT 6
B Erfragen der Komponente AWT, Swing, JavaFX & SWT 4
M Mausklick an darunterliegende Komponente weiterleiten AWT, Swing, JavaFX & SWT 9
B (Swing) Welche Komponente für unterteilten Text? AWT, Swing, JavaFX & SWT 4
D Wie nennt sich beschriebene Komponente? (-> Autocomplete) AWT, Swing, JavaFX & SWT 5
D Komponente im FlowLayout nicht mittig sondern rechts. Wie? AWT, Swing, JavaFX & SWT 4
G Swing Komponente gesucht (Textfeld mit Liste) AWT, Swing, JavaFX & SWT 2
padde479 Suche eine Komponente (->ToolBar) AWT, Swing, JavaFX & SWT 7
algorismi Browser Komponente AWT, Swing, JavaFX & SWT 3
G Swing Auswahlrechteck über Komponente zeichnen AWT, Swing, JavaFX & SWT 3
0 Swing Drag n' Drop Bug wenn Source und Target gleiche Komponente? AWT, Swing, JavaFX & SWT 4
C Swing Komponente mit setLocation auf JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 3
G Gibt es diese Komponente? AWT, Swing, JavaFX & SWT 11
slawaweis Suche TagCloud Komponente für Swing AWT, Swing, JavaFX & SWT 10
M Combobox soll Farbe einer Komponente setzen AWT, Swing, JavaFX & SWT 2
H Swing Eigene Komponente reagiert falsch auf mouseClicked() AWT, Swing, JavaFX & SWT 5
D swt komponente in swing-frame AWT, Swing, JavaFX & SWT 4
hdi SWT Operation auf GUI-Komponente kommt mal wieder nicht an... AWT, Swing, JavaFX & SWT 9
N Suche nach Komponente / LaF AWT, Swing, JavaFX & SWT 21
A Komponente zur Laufzeit hinzufügen und RICHTIG anzeigen AWT, Swing, JavaFX & SWT 3
T Swing Gibt es eine Komponente für eine farbliche Editorbox? AWT, Swing, JavaFX & SWT 6
S Swing Komponente mit jogl AWT, Swing, JavaFX & SWT 18
Airwolf89 Swing Von anderer Klasse auf Eigenschaften einer Komponente zugreifen AWT, Swing, JavaFX & SWT 5
SuperSeppel13 Komponente transparent übermalen AWT, Swing, JavaFX & SWT 2
I Swing Warten, bis eine GUI-Komponente aktualisiert ist? AWT, Swing, JavaFX & SWT 4
R Lineal an einer Komponente AWT, Swing, JavaFX & SWT 10
R KeyListener - welcher Komponente hinzufügen AWT, Swing, JavaFX & SWT 5
Ham Swing PropertyChangeListener aufrufende Komponente AWT, Swing, JavaFX & SWT 5
hdi LayoutManager GridBagLayout : Komponente hat falsche Größe? AWT, Swing, JavaFX & SWT 2
hdi Swing Suche passende API Klasse(n) für meine Komponente AWT, Swing, JavaFX & SWT 8
H Name einer Komponente ermitteln AWT, Swing, JavaFX & SWT 5
Developer_X Swing Problem beim "rezeichnen" -> Überzeichnen der Komponente AWT, Swing, JavaFX & SWT 8
M Suche Java Komponente AWT, Swing, JavaFX & SWT 2
D Swing Eigene Komponente mit JSpinner AWT, Swing, JavaFX & SWT 4
B Swing setDefaultButton geht nicht - Komponente fängt Events ab AWT, Swing, JavaFX & SWT 5
A Suche TreeTable-Komponente AWT, Swing, JavaFX & SWT 12
GilbertGrape ActionListener implementieren oder Eigenen für jede Komponente? AWT, Swing, JavaFX & SWT 9
C Spaltenorientierte Komponente, ähnlich JTabbed gesucht AWT, Swing, JavaFX & SWT 4
V Suche Komponente AWT, Swing, JavaFX & SWT 2
G Komponente zur Laufzeit tauschen. AWT, Swing, JavaFX & SWT 5
G Coverflow -artige Komponente für Swing? AWT, Swing, JavaFX & SWT 2
F eigene Swing-Komponente. Drehregler AWT, Swing, JavaFX & SWT 4
Landei Welche Kalender-Komponente? AWT, Swing, JavaFX & SWT 3
G Komponente in der der Cursor steht zurückgeben? AWT, Swing, JavaFX & SWT 2
P Unsichtbare Komponente in ein Bild rendern? AWT, Swing, JavaFX & SWT 11
G Komponente die im Center und North Bereich liegt zurückgebe? AWT, Swing, JavaFX & SWT 6
O Zwei Listener auf Komponente, warten auf Beendigun? AWT, Swing, JavaFX & SWT 2
G Kennt jemand diese Komponente? AWT, Swing, JavaFX & SWT 2
G Palette Komponente für Swing? AWT, Swing, JavaFX & SWT 8
M Name der Komponente? AWT, Swing, JavaFX & SWT 2
G Komponente oben positionieren (BorderLayout) AWT, Swing, JavaFX & SWT 3
ChaosNo1 Problem mit Komponente auf JPanel adden (beides abgeleitet) AWT, Swing, JavaFX & SWT 4
G Am Ende einer Tabellenzeile zu definierter Komponente gehen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben