JButton Problem beim Schriftfarbe Ändern

K

KandesBunzler

Gast
Hallo Community.

Ich habe mir einen Minesweeper-Klon geschrieben und als Spielfeld ein zweidimensionales Array von JButtons benutzt. Es funktioniert auch alles so, wie es soll, außer eben das Einfärben. Damit meine ich, dass wie beim Vorbild die Zahl der umliegenden Mienen je nach Anzahl unterschiedlich gefärbt sein soll.

Nur das passiert einfach nicht. Keine Fehlermeldung, der Debugger in Eclipse hat mich auch nicht schlauer gemacht. Es bleibt einfach schwarz. Vielleicht weiß jemand von euch ja Rat. Vermute, dass es vielleicht an den Threads liegt, die die JVM erzeugt, aber ich weiß nicht, wie ich das dann umgehen soll.

Der komplette Sourcecode ist zu lang, hier mal ein Beispiel wie ich das gemacht habe:

Java:
private void deckeAuf(JButton[][] btns, int zeile, int spalte) {

		//Iteration um das geklickte Feld herum
		for (int a = zeile - 1; a < zeile + 2; a++) {
			for (int b = spalte - 1; b < spalte + 2; b++) {
				//IndexOutOfBounds verhindern
				if (!(a == -1 || b == -1 || a == this.zeilenAnz || b == this.spaltenAnz || (a == zeile && b == spalte))) {
					//Wenn das umliegende Feld keine Bombe enthält und keine 0 ist, aufdecken, bei 0 aufdecken und weiter schauen
					if (this.spielfeld[a][b] != -1) {
						btns[zeile][spalte].setEnabled(false);
						if (this.spielfeld[zeile][spalte] != 0) {
							btns[zeile][spalte].setText("" + this.spielfeld[zeile][spalte]);
						}
						Color tmp = this.getColorForNumber(this.spielfeld[zeile][spalte]);
						btns[zeile][spalte].setBackground(Color.WHITE);
						btns[zeile][spalte].setForeground(tmp);
						if (this.spielfeld[a][b] == 0 && btns[a][b].isEnabled()) {
							this.deckeAuf(btns, a, b);
						} else {
							btns[a][b].setEnabled(false);
//Hier hole ich die Farbe...
							Color tmp2 = this.getColorForNumber(this.spielfeld[a][b]);
							btns[a][b].setBackground(Color.WHITE);
							if (this.spielfeld[a][b] != 0) {
								btns[a][b].setText("" + this.spielfeld[a][b]);
							}
//...hier setze ich sie. Nix passiert.
							btns[a][b].setForeground(tmp2);
						}
					}
				}
			}
		}

	}



private Color getColorForNumber(int i) {
		Color clr = null;

		switch (i) {
		case 1:
			clr = new Color(32, 178, 170);
			break;
		case 2:
			clr = new Color(0, 139, 0);
			break;
		case 3:
			clr = new Color(255, 130, 71);
			break;
		case 4:
			clr = new Color(139, 121, 94);
			break;
		case 5:
			clr = new Color(255, 215, 0);
			break;
		case 6:
			clr = new Color(0, 0, 139);
			break;
		case 7:
			clr = new Color(255, 0, 255);
			break;
		case 8:
			clr = new Color(139, 0, 0);
			break;
		}
		return clr;
	}
 

xehpuk

Top Contributor
Hey,

das Problem ist, dass dieses Verhalten Look-and-Feel-abhängig ist.

In Metal wird die Farbe anscheinend aus den UIDefaults geholt (Standard: Color[153,153,153]), während es in Windows Classic "funktioniert".

Eine Lösung weiß ich darauf nicht. Ich kann dir nur empfehlen, stattdessen JToggleButton zu verwenden und diese dann nicht zu deaktivieren, sondern immer gedrückt zu lassen, wenn sie einmal gedrückt wurden. So habe ich es zumindest mal für meinen Minesweeper-Klon gemacht.
 
K

KandesBunzler

Gast
Mhh. Ich habe mit JToggleButtons angefangen und die dann wieder verworfen und durch JButtons ersetzt, weil ich das mit dem UIManager und meinen bevorzugten Farben nicht klappte. -.-

Alles wieder rückgängig...och nö. :/

Zwischenzeitlich hatte ich einen "Bug", dass wenn ich auf einen aufgedeckten Button mit Zahl einen Rechtsklick gemacht habe (wie zum Flagge setzen) dann die Farbe gewechselt wurde - dabei wurde in der Methode nichts gemacht, weil die Bedingung isEnabled() ja schon false war (wird auf false gesetzt beim Aufdecken).

Deshalb auch meine Vermutung mit den Threads, da Swing ja eben nicht threadsicher ist und ja auch bei anderen Komponenten ein Notify braucht. Repaint() funktioniert übrigens leider auch nicht.

Ich würde es gerne verstehen, nur drum herum frickeln ist nicht befriedigend. Hat noch jemand einen Tipp?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
M Problem mit FlowLayout, JLabel und JButton AWT, Swing, JavaFX & SWT 4
B Schwer zu beschreibendes Problem mit JFrame oder JButton AWT, Swing, JavaFX & SWT 8
S Problem mit JButton und JTextArea AWT, Swing, JavaFX & SWT 2
I Swing Problem mit InputMap bei JButton (ActionListener) AWT, Swing, JavaFX & SWT 3
C JButton Problem AWT, Swing, JavaFX & SWT 24
P Problem mit Darstellung von JButton(s) AWT, Swing, JavaFX & SWT 2
M JButton Action Problem AWT, Swing, JavaFX & SWT 3
W Swing Problem ( JPanel & JButton ) AWT, Swing, JavaFX & SWT 6
K Problem mit JButton in JTable AWT, Swing, JavaFX & SWT 4
R JButton in JList - MouseEvent-Problem AWT, Swing, JavaFX & SWT 12
U Problem mit JButton (Position & Größe) AWT, Swing, JavaFX & SWT 7
B ActionListener, Thread, JButton Problem AWT, Swing, JavaFX & SWT 2
J problem mit ListCellRenderer und in der zeile ein Jbutton AWT, Swing, JavaFX & SWT 5
TheJavaKid JButton problem AWT, Swing, JavaFX & SWT 9
A jbutton setEnable() problem AWT, Swing, JavaFX & SWT 3
T Problem mit MouseListener bei JButton AWT, Swing, JavaFX & SWT 5
L Problem mit ActionListener, ChildFrame und JButton AWT, Swing, JavaFX & SWT 3
G JButton mit importFiles-Funktion auf JDrawPane AWT, Swing, JavaFX & SWT 5
B JButton Search AWT, Swing, JavaFX & SWT 8
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
N Erlennen ob JButton gedrückt ist AWT, Swing, JavaFX & SWT 6
D JButton Form verändern AWT, Swing, JavaFX & SWT 4
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Swing Kann man auf JButton zeichenen AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
ms_cikar Jbutton erzeugt neue Buttons AWT, Swing, JavaFX & SWT 2
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
A Swing JButton mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 6
F Swing Scrollbare Liste von JButton AWT, Swing, JavaFX & SWT 4
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
A Swing JButton aussehen AWT, Swing, JavaFX & SWT 12
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower Variable setzten mit JButton AWT, Swing, JavaFX & SWT 5
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
D JButton per Tastenkombi auswählen AWT, Swing, JavaFX & SWT 2
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
B JButton -> Rahmen wegbekommen AWT, Swing, JavaFX & SWT 7
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
M Textfarbe JButton verändern AWT, Swing, JavaFX & SWT 2
N JButton ausblenden AWT, Swing, JavaFX & SWT 2
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
C Swing JButton wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
stylegangsta MouseEvents aus JButton aufrufen AWT, Swing, JavaFX & SWT 3
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
M JButton - Listener AWT, Swing, JavaFX & SWT 1
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
L JButton - Größe anders als erwartet AWT, Swing, JavaFX & SWT 2
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
HoloYoitsu Swing JButton in verschiedenen Winkeln drehen AWT, Swing, JavaFX & SWT 0
J vocab1 = new JButton(""+voc1.get(nr).toString()+""); AWT, Swing, JavaFX & SWT 16
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
BRoll JButton Text nicht ausblenden ("...") AWT, Swing, JavaFX & SWT 2
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben