Best Practice Buttons sollen ÜBER Labeln liegen, also quasi im Vordergrund. WIE?

Uwe (:o)

Mitglied
Hallo zusammen,
ich bin noch Anfänger, also habt bitte etwas Geduld mit mir. ㋛
Ich generiere zur Laufzeit zuerst eine Matrix aus Labeln und anschließend Buttons.
Diese Buttons sollen ÜBER den Labeln liegen, die quasi als Hintergrund gedacht sind.
So sieht meine Methode dafür im Moment aus:

Java:
private void createSky() {
    int sizeLabel = 47;
    int sizeButton = 16;

    for (column = 0; column < 11; column++) {
        for (row = 0; row < 11; row++) {
            // ### create Background #####
            backGround[column][row] = new JLabel();
            jPanelSky.add(backGround[column][row]);
            backGround[column][row].setIcon(skyIcon);
            backGround[column][row].setOpaque(false);
            backGround[column][row].setBounds( //
                    -43 + column * (sizeLabel), //
                    -43 + row * (sizeLabel), //
                    sizeLabel, sizeLabel);
        }
    }

    for (column = 0; column < 11; column++) {
        for (row = 0; row < 11; row++) {
            // ### create Buttons ###:
            buttons[column][row] = new JButton();
            jPanelButtons.add(buttons[column][row]);
            buttons[column][row].setIcon(pointRED);
            buttons[column][row].setOpaque(true);
            buttons[column][row].setBounds( //
                    -51 + column * (sizeButton + 31), //
                    -51 + row * (sizeButton + 31), //
                    sizeButton, sizeButton);
        }
    }

}

Seit Stunden probiere ich alles Mögliche aus, aber beim Ausführen sind zuerst nur die Label zu sehen.
Seltsamerweise werden die Buttons, die über den Labeln liegen sollen sichtbar, sobald ich mit der Maus darüber fahre! Also nicht klicke, sondern nur "Mouse Drag".
Ich war schon am Überlegen irgendwie eine Schleife zu schreiben, die die Maus automatisch über alle Label führt.
Aber ersten weiß ich nicht, wie ich das machen soll und zweitens ist das ja wohl höchstens eine Krücke, aber keine Lösung,.
Langer Rede kurzer Sinn:
Wie erreiche ich es, dass sowohl die Label als auch die Buttons sofort zu sehen sind?
Welche Eigenschaft muss ich setzen oder was sonst muss ich tun?

P.S.: Im Moment habe ich die Label und die Buttons auf zwei (übereinander liegenden) JPanels gesetzt.
Das Problem war aber auch vorher, als beide auf EINEM JPanel waren, das gleiche. Ich hatte zuerst auch beides in EINER Schleife laufen, hatte aber die Hoffnung, dass es DARAN lag, was offensichtlich nicht der Fall ist.
 
warum erstellst und addest du die buttons nicht direkt in der ersten vorschleife und
in etwa
for 1
for 2
JLabel label = new JLabel()
JButton button = new JButton()
label.add( button)
 
Hallo,
wie ich geschrieben hatte:
Ich hatte zuerst auch beides in EINER Schleife laufen, hatte aber die Hoffnung, dass es DARAN lag, was offensichtlich nicht der Fall ist
habe ich das zuerst auch so gemacht, dann aber zwei Schleifen genutzt (und hier gezeigt), in der - vergeblichen - Hoffnung, dass die Buttons dann sichtbar werden.

Hast Du vielleicht noch eine Idee, wie mein Problem zu lösen ist?
Notfalls würde mir auch eine Möglichkeit reichen, wie ich ein Mouse-drag-over für einen Button im Code "simulieren" kann - also ohne die Maus zu benutzen - um den Button dadurch sichtbar zu machen.
 
Ich generiere zur Laufzeit zuerst eine Matrix aus Labeln und anschließend Buttons.
Diese Buttons sollen ÜBER den Labeln liegen, die quasi als Hintergrund gedacht sind.

Weil ?

also jetzt rein vom Logischen Aspekt her, was genau bezweckst du damit ?

Wie erreiche ich es, dass sowohl die Label als auch die Buttons sofort zu sehen sind?
Welche Eigenschaft muss ich setzen oder was sonst muss ich tun?

jetzt Übereinander überlagernd ?
Falls ja , warum ?
falls nein, sollte die Lösung reicht einfach sein , alles deinem Panel hinzufügen.

Notfalls würde mir auch eine Möglichkeit reichen, wie ich ein Mouse-drag-over für einen Button im Code "simulieren

MouseListener / MouseMotionListener, in der jeweiligen Methode dann deinen Button / Rollover oder whatever Effekt abarbeiten.

Das mit der Sichtbarkeit deiner Buttons bei Mouseover hat mit dem Focusevent zu tun welches dann dort Augenscheinlich ausgelöst wird. btw

Mouse über Button -> Button bekommt den Focus -> Event per Observer -> repaint() -> Button wird im Vordergrund gezeichnet....usw...
 
Zuletzt bearbeitet:
Hallo kaoZ,
erstmal vielen Dank für Deine Antwort.
Ich zeige Dir mal, wie das Ergebnis aussieht:
JavaForum20150123.JPG
(An den Stellen, wo die Buttons (rote Punkte) sichtbar sind, bin ich mit der Maus drüber gefahren.
Direkt beim Erstellen sieht man keinen einzigen Button.)
Das ist quasi ein erweitertes Koordinatensystem - JLabel im Hintergurnd - und die Buttons (JButtons, rote Punkte) liegen auf den Kreuzungspunkten.
Das ganze besteht praktisch aus Kacheln, die immer gleich sind und an den Eckpunkten Buttons haben.
Daher erstelle ich es zur Laufzeit und kann somit auch später vom User entscheiden lassen, wie groß das ganze werden soll (indem ich statt 11 eine Variable einsetze). Jetzt müsste auch klar sein, warum die Buttons ÜBER den Labeln liegen sollen.

Vielleicht kannst Du mir bei der Notlösung mit dem Mouse-Event nochmal konkreter helfen?
Angenommen ich habe das Event eingefügt:
Java:
buttons[column][row].addMouseListener(new MouseAdapter() {
					public void mouseEntered(MouseEvent evt) {
						buttonsMouseEntered(evt);
					}
				});
Was muss ich danach in die Schleife schreiben, damit das Event auch sofort aufgerufen wird
oder was muss ich in die Methode
Java:
private void buttonsMouseEntered(MouseEvent evt) {

}
schreiben?

Schon mal vielen Dank für Deine Mühe.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben