Hi. Ich bin dabei mein eigenes LookAndFeel zu entwickeln.
Bin auch schon recht fertig, allerdings gibt es bei einer Komponente ein nerviges Problem: JTabbedPane.
Ich hab mein UI dafür von BasicTabbedPaneUI abgeleitet und die Methode paintTabBackground entsprechend überschrieben, so dass ein Verlauf gezeichnet wird.
Wenn die Tabs nur eine Zeile in anspruch nehmen funktioniert das einwandfrei, sobald allerdings mehrere Zeilen benötigt werden sieht das ganze wesentlich schlechter aus.
Der Verlauf ist dann nur in der ersten Zeile sichtbar, d.h. korrekt. Die anderen bekommen sozusagen nur noch die Ausläufe des Verlaufs mit.
Wer's testen möchte:
Neuste Version inkl. SourceCode downloaden
Anleitung: Deutsch | Englisch
Hier die entsprechende Methode:
Ist noch nicht wirklich sauber programmiert, aber es funktioniert zumindest - bis auf die eine Ausnahme.
Ich bin leider mit meinem Latein am Ende und kann den Fehler nicht nachvollziehen. Vielleicht hat ja jemand von euch eine Idee?
Ich sag schonmal danke.
Bin auch schon recht fertig, allerdings gibt es bei einer Komponente ein nerviges Problem: JTabbedPane.
Ich hab mein UI dafür von BasicTabbedPaneUI abgeleitet und die Methode paintTabBackground entsprechend überschrieben, so dass ein Verlauf gezeichnet wird.
Wenn die Tabs nur eine Zeile in anspruch nehmen funktioniert das einwandfrei, sobald allerdings mehrere Zeilen benötigt werden sieht das ganze wesentlich schlechter aus.
Der Verlauf ist dann nur in der ersten Zeile sichtbar, d.h. korrekt. Die anderen bekommen sozusagen nur noch die Ausläufe des Verlaufs mit.
Wer's testen möchte:
Neuste Version inkl. SourceCode downloaden
Anleitung: Deutsch | Englisch
Hier die entsprechende Methode:
Code:
protected void paintTabBackground(Graphics g, int tabPlacement, int tabIndex,
int x, int y, int w, int h, boolean isSelected ) {
Graphics2D gfx = (Graphics2D)g;
Color a;
Color b;
if(isSelected) {
a = UIManager.getColor("tabbedPaneTabSelectedGradientTop");
b = UIManager.getColor("tabbedPaneTabSelectedGradientBottom");
} else {
a = UIManager.getColor("tabbedPaneTabGradientTop");
b = UIManager.getColor("tabbedPaneTabGradientBottom");
}
gfx.setPaint(new GradientPaint(0, 0, a, 0, h, b));
switch(tabPlacement) {
case LEFT: gfx.fill(new Rectangle(x+1, y+1, w-2, h-3));
break;
case RIGHT: gfx.fill(new Rectangle(x, y+1, w-2, h-3));
break;
case BOTTOM: gfx.fill(new Rectangle(x+1, y, w-3, h-1));
break;
case TOP: default: gfx.fill(new Rectangle(x+1, y+1, w-3, h-1));
}
}
Ist noch nicht wirklich sauber programmiert, aber es funktioniert zumindest - bis auf die eine Ausnahme.
Ich bin leider mit meinem Latein am Ende und kann den Fehler nicht nachvollziehen. Vielleicht hat ja jemand von euch eine Idee?
Ich sag schonmal danke.