Swing Nimbus Look And Feel verschiedene Buttons

  • Themenstarter Themenstarter Vorby
  • Beginndatum Beginndatum
V

Vorby

Gast
Hallo zusammen,

ich habe evtl. nur eine einfache Frage:
Vieleicht sehe ich den Wald vor lauter Bäumen nicht.

ich will mit Nimbus Look And Feel einen Button A und einen Button B verschieden darstellen.

Code:
selfDefinedProperties.put("Button.background", new Color(230,0,0));


so werden beide rot.
Wie kann ich aber nun einen rot und den anderen als grün darstellen?

danke für eure Antwort(en)

Grüße
 
[japi]JComponent#setBackground(java.awt.Color)[/japi] diese Methode hat JButton auch.
 
[japi]JComponent#setBackground(java.awt.Color)[/japi] diese Methode hat JButton auch.

Danke für Deine Antwort. Ja, ich weiß, dass es so geht.
Ich würde es gerne wie oben beschrieben lösen.

Also:

Code:
javax.swing.JButton jButton1;
javax.swing.JButton jButton2;

und dann wie oben beschrieben jButton1 rot und jButton2 grün, aber es sind halt beides Button's und ich blicke es nicht wie ich es angeben müsste.

Grüße
 
a) wieso?
b) Änderst du hier Werte des LaFs. Dieses wirkt sich auf jeden Button aus. Wenn, dann müsstest du bei jedem (neu-)zeichnen die Werte des LaFs vor dem entsprechenden Buttons ändern (+ danach wieder zurücksetzen). Davon rate ich dir aber ab.
 
a) wieso?
b) Änderst du hier Werte des LaFs. Dieses wirkt sich auf jeden Button aus. Wenn, dann müsstest du bei jedem (neu-)zeichnen die Werte des LaFs vor dem entsprechenden Buttons ändern (+ danach wieder zurücksetzen). Davon rate ich dir aber ab.

danke du bist sehr schnell 🙂

1.)
Ich habe eine Anwendung, wenn ich nun die Optik ändern lassen möchte (nicht ich selber) wäre es am einfachsten diese an einer Stelle zu ändern.
Und so wollte ich (dachte halt es geht) alle Buttons, Panels, etc ändern, was ja auch geht. Nun habe ich aber auch z.b. Buttons die genau nicht dem anderen Buttons entsprechen. Also alle sind grau nur einer ist grün und rot.
Damit mir keiner im Code fuschen muss. War die Idee mit Nimbus für mich sehr Atraktiv. Nach dem Motto:
wunschdenken:
Code:
//works
put("Button[Disabled].textForeground", new Color(168,200,156));
put("Button.font", new Font("SansSerif", Font.BOLD, 15));
put("Button.background", new Color(23,23,55));
//dosn't work
put("MyRedButton.background", new Color(120,0,0));

Also einmal definieren und gut ist.
Aber ich denke Du hast mir schon den Wind aus den Segeln genommen...

Bleibt wunschdenken?!

Danke für deine Antworten.
 
Wenn du soetwas haben möchtest, musst du es wenn dann schon selber realisieren:
a) Eine Klasse, die von JButton erbt und die UI-Werte ausliest+anwendet
b) Eine Factory, die dir einen Button erstellt unter Rücksichtnahme der Konstanten.
Java:
public static JButton createJButton(final String uiPrefix)
{
	JButton button=new JButton();
	
	if(UIManager.getColor(uiPrefix+".background")!=null)
		button.setBackground(UIManager.getColor(uiPrefix+".background"));
	if(UIManager.getColor(uiPrefix+".foreground")!=null)
		button.setForeground(UIManager.getColor(uiPrefix+".foreground"));
	
	return button;
}
 
Zuletzt bearbeitet von einem Moderator:
Wenn du soetwas haben möchtest, musst du es wenn dann schon selber realisieren:
a) Eine Klasse, die von JButton erbt und die UI-Werte ausliest+anwendet
b) Eine Factory, die dir einen Button erstellt unter Rücksichtnahme der Konstanten.
Java:
public static JButton createJButton(final String uiPrefix)
{
	JButton button=new JButton();
	
	if(UIManager.getColor(uiPrefix+".background")!=null)
		button.setBackground(UIManager.getColor(uiPrefix+".background"));
	if(UIManager.getColor(uiPrefix+".foreground")!=null)
		button.setForeground(UIManager.getColor(uiPrefix+".foreground"));
	
	return button;
}

Ja danke, ich hatte das hier gefunden...
Caffeine Induced Ramblings – Jasper Potts’s Blog Blog Archive Nimbus UIManager UIDefaults
und dort steht z.b.

Code:
NimbusLookAndFeel laf = new NimbusLookAndFeel();
laf.getDefaults().put("\"SomeLabel\".textForeground", Color.BLUE);
...
JLabel lbl = new JLabel("Enter name here:");
lbl.setName("SomeLabel");
aber das geht nicht :-(
 
OK hab es. Man muss noch sein Panel oder was auch immer Regestrieren.

Code:
this.register(Region.PANEL, "\"SomeLabel\"");
 

Zurück
Oben