Hi zusammen.
Ich besitze ein JPanel indem ich eine Scala darstelle. Diese Scala soll dem Anwender veranschaulichen, welcher Bereich der Daten gerade im Fenster dargestellt wird.
Das JPanel welches die Scala darstellt (sowie andere JPanel welche die Daten darstellen) befinden sich in einer JScrollPane.
Wenn also der Scrollbalken bewegt wird, dann ändert sich auch der sichtbare Bereich.
Meine Berechnungen stehen alle und ich kann mir in dem ScalaPanel z.B. einen Strich darstellen, welcher auch den korrekten Bereich darstellt.
Nun hätte ich aber gerne auf meiner Scala so etwas wie ein schattiertes Rechteck, welches den sichtbaren Bereich anzeigt. Kann ich irgendwie ein Rechteck zeichnen, dieses mit einer Farbe befüllen, wobei die Farbe aber halb transparent ist?
Folgend meine paintComponent Methode:
Ich besitze ein JPanel indem ich eine Scala darstelle. Diese Scala soll dem Anwender veranschaulichen, welcher Bereich der Daten gerade im Fenster dargestellt wird.
Das JPanel welches die Scala darstellt (sowie andere JPanel welche die Daten darstellen) befinden sich in einer JScrollPane.
Wenn also der Scrollbalken bewegt wird, dann ändert sich auch der sichtbare Bereich.
Meine Berechnungen stehen alle und ich kann mir in dem ScalaPanel z.B. einen Strich darstellen, welcher auch den korrekten Bereich darstellt.
Nun hätte ich aber gerne auf meiner Scala so etwas wie ein schattiertes Rechteck, welches den sichtbaren Bereich anzeigt. Kann ich irgendwie ein Rechteck zeichnen, dieses mit einer Farbe befüllen, wobei die Farbe aber halb transparent ist?
Folgend meine paintComponent Methode:
Code:
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setBackground(Color.LIGHT_GRAY);
g2.setColor(Color.BLACK);
int h = getHeight();
int w = getWidth();
double lowestPos = model.getLowestPosition();
double highestPos = model.getHighestPosition();
// draw rect on actual visible Range
double visiblePos_low = model.getLowestVisiblePosition();
double visiblePos_high = model.getHighestVisiblePosition();
double xPos_from = Math.floor(((double)(w-left_margin-right_margin)*visiblePos_low)/highestPos);
double xPos_to = Math.ceil(((double)(w-left_margin-right_margin)*visiblePos_high)/highestPos);
if(xPos_from < left_margin){
xPos_from = left_margin;
}
if(xPos_to >= w-left_margin-right_margin){
xPos_to = w-right_margin;
}
g2.setColor(Color.BLUE);
g2.drawLine((int)xPos_from,h/2,(int)xPos_to,h/2);
}