Java JLabel[] in jScrollPane einbinden

evilf

Cadet 4th Year
Registriert
Dez. 2010
Beiträge
103
Hey,

bin grad dabei, für mein entwickeltes Programm (https://www.computerbase.de/forum/t...thode-in-ein-anderes-array-uebergeben.919617/ ;)) eine GUI zu entwerfen...
Klappte bis jetzt eigentlich auch ganz gut^^
Komme aber grad nicht weiter...
Habe folgendes Problem:
Ich möchte für jeden Spieler die Handkarten in einem Jlabel[] (mit Array) anzeigen. Die Karten sollen aus der Klasse Spieler aus dem dortangelegten Zwischenspeicher geholt werden (karte1, karte2,... in der Methode handkarten()...) & dann nacheinander im Jlabel[] angezeigt werden. Es soll deshalb nacheinander geschehen, da der Spieler zu Anfang 2 Handkarten hat & sich ab da imer entscheidet, ob er noch eine zieht oder es sein lässt (Spielprinzip von Black Jack oder 17 & 4...).
Mein Problem besteht nun darin, dass ich das Jlabel[] gern in ein jScrollPane packen würde, da ich die Gui nicht so breit machen will, wenn tätsächlich mal 8 Karten gezogen werden...
Hauptproblem:
PHP:
for(int f = 0; f < 8; f++)
    {
         jL_karte1[f] = new JLabel();
         jL_karte1[f].setBounds(0, 0, 320+f*150, 235);
         jL_karte1[f].setIcon(spiel.spieler1.karte);
         jScrollPane1.setViewportView(jL_karte1);
}
ideejlabelca2ri1xvtw.png


Falls weiterer Code benötigt wird, bitte schreiben...

Schonmal vielen Dank :)

MfG, evilf
 
der übersichthalber würde ich die karten eher kleiner darstellen und die augenzahl zusammenrechnen und irgendwo ausgeben. denke das würde die bedienung vereinfachen. und dein problem wäre auch nicht mehr direkt gegeben.

könnten es nicht auch mehr als 8 karten werden? ass zählt im Blackjack doch als 11 oder 1, wenn ich mich recht entsinne. dann könnte man theoretisch 4 * asse ziehen + 4 * 2en = 12 und man hat nur 8 karten, dann könnte man pessimal gesehen noch 3 * 3en ziehen und man hat dann 21 mit 11 Karten.
 
Zuletzt bearbeitet:
Da geb ich dir Recht, aber die Sonderregel mit dem Ass (11 oder 1) haben wir der Einfachheit halber rausgelassen...
 
Ich hab das Problem ehrlich gesagt nicht ganz erfasst, pflichte aber dem Vorschlag
der übersichthalber würde ich die karten eher kleiner darstellen
bei.
Wenn du dich von Labels löst und stattdessen einfach ein JPanel benutzt, dessen paint() du überschreibst, kannst du dir ganz uneingeschränkt selbst bauen, wie die Karten darin dargestellt werden. Denkbar wäre auch ein draggen per Maus (quasi mit "Handcursor"). Wirkt direkt moderner als so ein hässlicher Scrollbalken.
Falls du die Karten einfach kleiner darstellst innerhalb des Panels, könntest du auch bei mouse-over eine größere Version einblenden, so wie einen Tooltip.
 
Hallo,

ich glaube ich weiß was du meinst.

Der Viewport des Scrollpane kann immer nur eine Komponente aufnehmen.
Sprich in deiner Schleife überschreibst du den Viewport jedes mal mit der nächsten Karte.
Daher solltest du zuerst deine ganzen Labels in ein Panel einfügen und dann dem Viewport halt das Panel zuweisen.

Also pseudo mäßig aufgeschrieben:
PHP:
JPanel panel = new JPanel();

~irgendwelche eigenschaften des Panels festlegen~

for(int f = 0; f < 8; f++)
{
         jL_karte1[f] = new JLabel();
         jL_karte1[f].setIcon(spiel.spieler1.karte);
        
         panel.add(jL_karte1[f]);
}

jScrollPane1.setViewportView(panel);
 
Zurück
Oben