NullLayout: "Überlappung von Komponenten"

Status
Nicht offen für weitere Antworten.

GagamehlO

Aktives Mitglied
So ich habe ein großes Problem.
Ich programmier gerade eine 2 Dimensionales Rundenbasiertes Strategiespiel das nur rein Netzwerkfähig ist.
Werde in punkto Performance hier vielciht bald noch einmal 1-2 Thread eröffnen müssen,
aber ansonsten läuft es eigentlich schon sehr gut.
Nun möchte ich mich dem Design zuwenden, das Spielfeld besteht aus n*m Felder (12*15 oder os) die alle nachher via MouseListener ancklickbar sind. Die Felder sind abgeleitete aus Label oder Cnavas (is ja auch wurscht) und besitzen eine größe von 50*50 Pixeln.
Wie gesagt, das hat bis jetzt auch schon alles wunderbar geklappt, doch möchte ich mich nun dem Design zuwenden.
Das Spielfeld liegt übrigens in nem Panel mit nem 'null'-Layout auf einem Frame das im Vollbildmodus gestartet wird, was aber auch noch manchmal einige Probleme beinhaltet (beim minimieren kann ich z.B: das Programm nicht mehr in der Taskleite sehen etc. Dies aber jedoch auch nicht immer)

Das Spiel spielt in einem Sci-Fi Universum und ich möchte das Spielfeld in einen Monitor einbette (Design).
Aus diesem Grund habe ich mir eine Monitor-pic erstellt dies aus Canvas abgeleitet ...etc.
Nach meiner Logig müsste ich zuerst den Monitor in den Hintergreund packen, also zuerst drauf legen und danch das Spielfeld drüber legen.
Als ich dies tat, sah ich komischerweise den Montitor über dem Spielfeld liegen. Oder ich kontne das Spielfeld einfach nicht erkennen sondern nur den Monitor.
Dann habe ich es anders versucht, da der Monitor in seinem Zentrum eine leere Fläche beinhaltet also die Anzeigefläche eine transparente Fläche ist und das Bild ein gif ist, habe ich den Monitor einfach einmal über das Spielfeld gelegt.
Jetzt ging es komischerweise. (Warum nicht anders? Wäre nett wenn ihr mir dies einmal erläutern könntet).
Die Sache ist nur die das meine Spielfeld sehr dynamisch gehalten wird, also das ab und zu ein paar Felder per remove(Component c) gelöscht werden und durch andere ersetzt werden und diese dann platziert werden. Nun sehe ich dann leider gar nichts sondern nur, den Hintergrund des Fensters. Also der Vorgang des Löschens funktionierte noch doch sehe ich komischerweise/mysteriöserweise die neuen Componenten nicht mehr die ja durch das neue 'Adden' auf dem Monitor leigen müssten, was ja wiederum vorher auch nicht geklappt hat ( Also zuerts den Monitor setzen).
Der Monitor wird in das selbige Panel gesetzt, ich könnte mir vorstellen, das es funktionieren würde, wenn ich den Monitor unter das Panel des Spielfelds legen würde, da das Panel ja nicht ständig neu gesetzt werden muss.
Doch hänge ich schon so ziemlich lange dran und möchte dies einfach so schaffen, da es mir gegen die Java-Logik verstößt und es einfach so funktionieren müsste. Bitte helft mir.
Achja repaint() etc. hilft auch nicht weiter.
Mit validate() und invalidate() konnte ich einen kleinen erfolg sehen.Doch ich würde einfach gerne wissen warum es nicht so funktioniert.

Ich habe jetzt keine Codebeispiele dran gehangen, da es einfach nur noch komplexe und komplizierte Algorithmen sind.
Die einfach in Ihrer Gesamtheit kompliziert sind (Sehr viele Referenzen, rekursiv etc.)
Aus diesem Grund habe ich auch so viel geschrieben um es euch möglichst verständlich zu machen.

mfg GagamehlO
 

Campino

Top Contributor
Soweit ich weiß unterstützt AWT erstmal keine Transparenz. Du solltest also nicht Canvas und Label sondern JPanel und JLabel->Swing verwenden, dann wird transparenz unterstützt. Ansonsten: Hast du schon mal darüber nachgedacht, die Felder einfach dem Canvas hinzuzufügen? Dann must du natürlich immer wenn sich da was ändert validate() aufrufen, aber das solltest du sowieso tun. Auch das null-Layout ist nicht optimal. Für ein Spielfeld aus quadratischen Feldern kann man gut dass GridLayout nutzen.
 

GagamehlO

Aktives Mitglied
Wenn ich die Felder dem Canvas zufüge, also via der Paint-Methode.
Wie würde ich denn dann für jedes Feld einen Listener einbauen können, außer die X und Y -Coordinaten der Mauszunehmen.
Nehme eigentlich ungern einen anderen LayoutManager, da ich totale absolute Werte für mein Spiel benötige.
Warum sollte AWT keine transparenz unterstützen?
Zuerst funktioniert dies ja. Aber nach "Neu-setzen" der Komponenten nicht mehr.
Und in AWT Swing einbauen?
Klingt irgendwie komisch???
Und ich möchte ungern alles in Swing umändern, da ich meiner Meinung nach da durch keine Vorteile erziele.
Ich benutze nämlich keine vorgefertigten Componenten sondern leite aus allen ab überschreibe die Paint-Methode und baue mir eigene Schnittstellen für diese.
 

GagamehlO

Aktives Mitglied
So habe mal nen bischen Coderausgebröselt.
Ich habe das Bild und das Spielfeld in 2 Getrennte Objekte gelegt.
Spielfeld = Objectname: game ; Panel ; beinhaltet Label
Bild = Objectname: windowimage; Canvas


Hier ein wenig Code:

Code:
  windowimage.setBounds((graphics.width/2)-(800/2),(graphics.height/2)-(750/2),windowimage.sizeX,windowimage.sizeY);
add(windowimage);
game.setBounds(((graphics.width/2)-(800/2)),((graphics.height/2)-(750/2)),800,750);
add(game);

Das Bild liegt über dem Spielfeld obwohl es zuerst plaziert wurde.
Anders herum ebenso.

Was soll das?

So damit ihr euch das mal besser vorstellen könnt, hier nen Bild des Spiels. Mit dem Spielfeld.

spacebattle.gif
 

MPW

Top Contributor
also awt in swing ist kein Problem, du brauchst nur die Imports ändern und (fast) überall nur ein J davor hängen.

AWT unterstützt keine Transparntz, aber soweit ich das kapiert hab, brauchst du das auch hier nicht.
 

GagamehlO

Aktives Mitglied
Also in Japanels legen?
Dann können die Komponenten sich überlappen?
Das Frame sollte dann aber auch nen JFrame sein oder?
 
R

Roar

Gast
:?
misch kein awt und swing, natürlich gibts in awt genauso transparenz wie in swing. benutzen ja beide das gleiche -> Graphics etc. bleib lieber bei awt.
zum problem: wenn du 1.5 hast kansnt du setComponentZOrder() benutzen um komponenten nach vorne/hinten zu verschieben
ansonsten kannst du die komponenten nur noch selbst zeichnen um um swing herum zu kommen
 

MPW

Top Contributor
Roar hat gesagt.:
misch kein awt und swing

Das hab' ich auch nicht so gemeint, ich meinte mit "awt in swing ist kein Problem", dass man von awt leicht auf swing umstellen kann.

Und diesmal hab' ich recht, awt kann nicht transparent:

http://java.info-fhb.de/k100235.html#sectlevel4id036003001005 :

"Anders als im AWT, bei dem alle Dialogelemente einen undurchsichtigen Hintergrund hatten, kann dieser bei Swing-Komponenten auch transparent sein. "

Oder beziehst du dich auf die Bilder?


Ich würde selbst für die Bilder Swing nehmen, da es einfacher zu implementieren ist, und meiner Erfahrung nach flackern JLabels auch nicht so wie diese alten Image-Klassen aus'm AWT.
 
R

Roar

Gast
ich dachte er zeichnet sein spielfeld mit Graphics, oder nicht? hab nich alles gelesen. ich würde gar kein swing nehmen, da es 1. performanter ist das spielfeld, die bilder und was auch immer worums geht selber zu zeichnen und auch nicht viel schwerer zu implementieren, desweiteren sind "diese alten Image Klassen aus'm AWT" alles andere als alt, sondern immernoch die basis für alle grafikoperationen in awt und auch swing.
 

MPW

Top Contributor
Hm, also mir soll auch das recht sein, aber dann muss man mit double-buffering arbeiten, clipping manuell implementieren...das ist nicht trivial.

Wobei man auch sagen muss, dass Swing jetzt auch nicht so unperformant ist....

Also Swing arbeitet soweit ich weiß mit ImageIcon und nicht mit Image.
 
R

Roar

Gast
und wo speichert ImageIcon das bild? :) richtiiiig in einem Image objekt ;) und wenn man mehr machen will als bunte bildchen in ner gui darzustellen kommt man um die awt image klassen nich drumrum
aba jetz erstma pizza :)
 

MPW

Top Contributor
Ja schon, aber es wird glaube ich automatisch double-buffered...?

Also dann nehmt ihr halt eure geliebten Image-Klassen...ich hab' jetzt keine Lust mehr;-)
 

GagamehlO

Aktives Mitglied
Ne das SpielFeld wird nicht in Painzt gezeichnet, aber ein Feld alleine.
Wie ich schon schrieb hatte es je je nach Anordnung bedingte Transparenz.
Ich würde euch ja gener den Quellcode geben, bin leider aber schon bei 2K Zeilen und dann müsste ich alles nocheinmal genau dokumentieren.
ich denke ich code jetzt erst mal weiter am "Space Spy" (Ähnlich wie Game Spy) und mach das Progrqamm so noch Performanter bevor ich mich dem Code zuwende.
@Roar, aber denke für deine genannte Methode.
 

GagamehlO

Aktives Mitglied
setComponentZOrder() wirft bei mir die ganze Zeit ne Exception.
Ich übergebe einfach ne 2 für die höher liegende Ebene also das Spielfeld-Panel und eine 1 für den Monitor.
Sind die ID´s schon belegt?
Ist irgend ne illegal... Exception.
 
R

Roar

Gast
TFM hat gesagt.:
Throws:
NullPointerException - if comp is null
IllegalArgumentException - if comp is one of the container's parents
IllegalArgumentException - if index is not in the range [0, getComponentCount()] for moving between containers, or not in the range [0, getComponentCount()-1] for moving inside a container
IllegalArgumentException - if adding a container to itself
IllegalArgumentException - if adding a Window to a container

setComponentZOrder(comp, 0); wenn es als oberstes gezeichnet werden soll.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Swing Nulllayout AWT, Swing, JavaFX & SWT 9
A Automatische anpassung im NullLayout AWT, Swing, JavaFX & SWT 10
GUI-Programmer LayoutManager NullLayout - Ist es auch in diesem Fall schlecht? AWT, Swing, JavaFX & SWT 3
T NullLayout verwenden, oder nicht? AWT, Swing, JavaFX & SWT 9
alex_fairytail LayoutManager NullLayout überlappende Labels werden nicht angezeigt AWT, Swing, JavaFX & SWT 4
H Nulllayout in ein anderes Layout AWT, Swing, JavaFX & SWT 5
V Nulllayout und wie auf Resizen reagieren? AWT, Swing, JavaFX & SWT 4
L Größe von Komponenten im Nulllayout mit der Maus verändern. AWT, Swing, JavaFX & SWT 2
B Überlappung im GridPane AWT, Swing, JavaFX & SWT 2
N Swing Alle Objekte anzeigen auch bei JPanel-Überlappung AWT, Swing, JavaFX & SWT 6
S Überlappung zweier Komponenten AWT, Swing, JavaFX & SWT 12
G Überlappung von Komponenten AWT, Swing, JavaFX & SWT 6
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
F Gebundene Eigenschaften bei Komponenten mit NetBeans verarbeiten AWT, Swing, JavaFX & SWT 3
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
P Gleichmäßige Anodnung von Komponenten im migLayout AWT, Swing, JavaFX & SWT 2
DaCrazyJavaExpert Swing Komponenten genauer anordnen. AWT, Swing, JavaFX & SWT 13
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
Neumi5694 LookAndFeel Look & Feel nicht angezeigter Komponenten ändern AWT, Swing, JavaFX & SWT 6
D JavaFX GUI Komponenten werden langsam bei größerer Datenmenge AWT, Swing, JavaFX & SWT 6
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Welche Komponenten vermisst ihr? Welche wären essenziell notwendig? AWT, Swing, JavaFX & SWT 8
M Datei mit Komponenten einbinden AWT, Swing, JavaFX & SWT 7
T SWT Externer zugrif auf SWT Komponenten AWT, Swing, JavaFX & SWT 3
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
J MouseOver bei Komponenten AWT, Swing, JavaFX & SWT 9
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
G Komponenten vergrößern sich nicht trotz Layoutmanager AWT, Swing, JavaFX & SWT 24
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
Bartertown JTable - Verschiedene Komponenten in einer Spalte unterbringen AWT, Swing, JavaFX & SWT 3
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
M Komponenten übereinander AWT, Swing, JavaFX & SWT 7
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
H Swing Getter für GUI-Komponenten AWT, Swing, JavaFX & SWT 3
B Komponenten in Fenster verdrängen sich untereinander AWT, Swing, JavaFX & SWT 6
N Komponenten übereinander AWT, Swing, JavaFX & SWT 3
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
M Swing Komponenten enablen? AWT, Swing, JavaFX & SWT 4
X Java Komponenten jeder Zeit hinzufügen können AWT, Swing, JavaFX & SWT 3
S View-Komponenten im Controller bekannt machen AWT, Swing, JavaFX & SWT 7
D Grafische Komponenten komplett neu aufbauen (Neukonstruktion) AWT, Swing, JavaFX & SWT 5
A AWT Komponenten in JavaFX einbetten AWT, Swing, JavaFX & SWT 9
M Swing Komponenten erscheinen beim darüberfahren? AWT, Swing, JavaFX & SWT 7
H Komponenten unmittelbar nach dem Ausführen teilweise unsichtbar AWT, Swing, JavaFX & SWT 3
K GUI in Komponenten aufteilen (MVC) AWT, Swing, JavaFX & SWT 2
W Funktionen, sowie aufruf einiger Komponenten AWT, Swing, JavaFX & SWT 4
J Alle Komponenten eines JFrames durchlaufen AWT, Swing, JavaFX & SWT 2
R Swing Komponenten bleiben bei Animation unsichtbar AWT, Swing, JavaFX & SWT 7
T Unter JPanel liegende Komponenten "totschalten" AWT, Swing, JavaFX & SWT 5
morphesus Swing Komponenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 8
C Swing Reihenfolge der Initialisierung von Komponenten AWT, Swing, JavaFX & SWT 6
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
W Bildgröße automatisch an Komponenten anpassen AWT, Swing, JavaFX & SWT 3
TheWhiteShadow Swing Komponenten organisieren AWT, Swing, JavaFX & SWT 9
Z größe der komponenten bestimmen AWT, Swing, JavaFX & SWT 16
C GUI-Komponenten skalieren AWT, Swing, JavaFX & SWT 10
M Seltsames Problem mit Resize eines Fensters und seiner Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Komponenten verstecken AWT, Swing, JavaFX & SWT 4
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
T Swing Font für alle Komponenten ändern AWT, Swing, JavaFX & SWT 2
S Problem mit Swing Komponenten AWT, Swing, JavaFX & SWT 11
A Swing Alle Komponenten auf JFrame ermitteln AWT, Swing, JavaFX & SWT 4
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
S JButton und textfield.setText - Komponenten über-/verdecken sich AWT, Swing, JavaFX & SWT 15
M Komponenten übereinander prüfen AWT, Swing, JavaFX & SWT 3
W LayoutManager GridBag richtig nutzen - Komponenten richtig anordnen und automatisch vergrößern AWT, Swing, JavaFX & SWT 5
M Komponenten in anderer Reihenfolge anzeigen AWT, Swing, JavaFX & SWT 4
G swing Komponenten verrutschen ständig... AWT, Swing, JavaFX & SWT 6
D Mit GridBayLayout Komponenten anordnen AWT, Swing, JavaFX & SWT 6
N Window transparent, Komponenten nicht transparent AWT, Swing, JavaFX & SWT 11
R Farbänderung von Komponenten wird nicht wirksam AWT, Swing, JavaFX & SWT 7
P Swing Hierachie oder Reihenfolge von Komponenten AWT, Swing, JavaFX & SWT 5
T Sich überlappende Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Probleme beim Anzeigen der einzelnen Komponenten AWT, Swing, JavaFX & SWT 16

Ähnliche Java Themen

Neue Themen


Oben