Hi,
ich muss in eine Tabelle hunderte von Einträgen selber zeichnen. Im Moment sieht die Routine folgendermassen aus:
Das Ergebnis habe ich in einem Bild angehängt. Es handelt sich hierbei um einen Techniker-Auftrag. In diesem soll nun die eigentlich Arbeitszeit und die An- und Abfahrszeit farblich gertrennt gezeichnet werden. Der einfachheit halber habe ich jetzt nur mal die Anfahrtszeit mit eingebaut.
Wie ihr seht ist das Ergebnis natürlich suboptimal, da der Übergang von Traveltime zu Worktime nicht abgerundet sein sollte. Da die Traveltime aber von 1 Pixel bis zu 50% des ganzen Balken einnehmen kann, kann ich auch nicht einfach die Worktime als FillRect machen, da es dann, wenn die Traveltime nur 1-2 Pixel breit ist die abgerundeten Ecken zernageln würde. Fusch wäre jetzt das so zu machen wie ich es habe und ab einer TravelTime von 5 Pixeln nochmal ein Rectfill mit Travelfarbe ab xPos 5 zu zeichnen z.B. Andere Fuschereien gibts natürlich auch ohne Ende.
Schöner wäre es hier eine performante und saubere Lösung zu finden. Kann man da eventuell mit Maskierung arbeiten. Oder ist das dann viel zu langsam?
Wer hat Ideen?
Gruß
Claus
ich muss in eine Tabelle hunderte von Einträgen selber zeichnen. Im Moment sieht die Routine folgendermassen aus:
Code:
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int w = getWidth() - shadowLeft;
int h = getHeight() - shadowTop;
GradientPaint gp = new GradientPaint(0, 0, data.topColor, 0, h, data.bottomColor);
g2d.setPaint(gp);
g2d.fillRoundRect(0, 0, w, h, 10, 10);
inttoTravel = ((int)toTravelMinutes * pixelPerHour) / 60;
if(toTravel > 1)
{
gp = new GradientPaint(0, 0, travelData.topColor, 0, h, travelData.bottomColor);
g2d.setPaint(gp);
g2d.fillRoundRect(0, 0, toTravel, h, 10, 10);
}
g2d.setColor(GlobalSettings.jobViewBorderColor);
g2d.drawRoundRect(0, 0, w - 1, h - 1, 10, 10);
}
Das Ergebnis habe ich in einem Bild angehängt. Es handelt sich hierbei um einen Techniker-Auftrag. In diesem soll nun die eigentlich Arbeitszeit und die An- und Abfahrszeit farblich gertrennt gezeichnet werden. Der einfachheit halber habe ich jetzt nur mal die Anfahrtszeit mit eingebaut.
Wie ihr seht ist das Ergebnis natürlich suboptimal, da der Übergang von Traveltime zu Worktime nicht abgerundet sein sollte. Da die Traveltime aber von 1 Pixel bis zu 50% des ganzen Balken einnehmen kann, kann ich auch nicht einfach die Worktime als FillRect machen, da es dann, wenn die Traveltime nur 1-2 Pixel breit ist die abgerundeten Ecken zernageln würde. Fusch wäre jetzt das so zu machen wie ich es habe und ab einer TravelTime von 5 Pixeln nochmal ein Rectfill mit Travelfarbe ab xPos 5 zu zeichnen z.B. Andere Fuschereien gibts natürlich auch ohne Ende.
Schöner wäre es hier eine performante und saubere Lösung zu finden. Kann man da eventuell mit Maskierung arbeiten. Oder ist das dann viel zu langsam?
Wer hat Ideen?
Gruß
Claus