Hi zusammen,
ich zeichne in ein JPanel die Daten aus einem Array (manche von euch kennen meine Fragen dazu noch von damals). Hier meine paintComponent();
Hier das zeichnen der Datenpunkte:
So:
Und nun möchte ich, immer wenn sich die Maus-Position ändert, diese Mausposition als senkrechten Strich auf dem JPanel darstellen, die Methode für das zeichnen, wird also immer dann aufgerufen, wenn das Event "mouseMoved" gefeuert wird:
Nun habe ich das Problem, dass der senkrechte Strich NICHT über das ganze JPanel gezeichnet wird, sondern nur, das JPanel als Koordinatensystem betrachtet, von der Y = 0 bis zur Höhe des JPanels.
Also unterhalb der X-Achse wird die Mausposition nicht gezeichnet.
Nun meine Frage: Wie kann ich den senkrechten Strich komplett über das JPanel zeichnen, also nicht nur im positiven Bereich?
ich zeichne in ein JPanel die Daten aus einem Array (manche von euch kennen meine Fragen dazu noch von damals). Hier meine paintComponent();
Code:
public void paintComponent (Graphics g)
{
super.paintComponent(g);
final Graphics2D g2d = (Graphics2D) g;
final AffineTransform orgTf = g2d.getTransform();
final Stroke orgStroke = g2d.getStroke();
try {
/* get the component size */
final Insets ins = getInsets();
final int width = getWidth() - ins.left - ins.right;
final int height = getHeight() - ins.top - ins.bottom;
/* transform view into codomain */
g2d.translate(ins.left, ins.top);
g2d.scale((width - 1) / (maxx - 1), -(height - 1) / (maxy - miny));
g2d.translate(minx, -maxy);
/* assign a 1px stroke */
g2d.setStroke(new BasicStroke(1f / width, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND));
drawPlot(g2d);
} finally {
// reset old transform
g2d.setTransform(orgTf);
g2d.setStroke(orgStroke);
}
}
Hier das zeichnen der Datenpunkte:
Code:
private void drawPlot(final Graphics2D g2d) {
final Line2D.Double line = new Line2D.Double();
final Line2D.Double extr_Line = new Line2D.Double();
Rectangle rect = this.getVisibleRect();
for (int i = rect.x; i < (rect.x + rect.width) - 1; i++) {
// in data befinden sich meine Datenpunkte
if (i < data.size() - 1) {
g2d.setColor(Color.GREEN);
line.setLine(i, data.get(i).doubleValue(), i + 1, data.get(i + 1)
.doubleValue());
g2d.draw(line);
}
if(extremaSet.contains(i)){
g2d.setColor(Color.MAGENTA);
extr_Line.setLine(i,this.maxy, i,this.miny);
g2d.draw(extr_Line);
}
}
g2d.setColor(Color.BLUE);
g2d.drawLine(marker.x, 0, marker.x, marker.y + marker.height- 1);
}
So:
Und nun möchte ich, immer wenn sich die Maus-Position ändert, diese Mausposition als senkrechten Strich auf dem JPanel darstellen, die Methode für das zeichnen, wird also immer dann aufgerufen, wenn das Event "mouseMoved" gefeuert wird:
Code:
private Rectangle marker = new Rectangle();
protected void paintMousePosition(){
Point pt = mouseModel.getMousePoint();
repaint(marker);
marker.setBounds(pt.x,-100, 1, 10000);
repaint(marker);
repaint();
}
Nun habe ich das Problem, dass der senkrechte Strich NICHT über das ganze JPanel gezeichnet wird, sondern nur, das JPanel als Koordinatensystem betrachtet, von der Y = 0 bis zur Höhe des JPanels.
Also unterhalb der X-Achse wird die Mausposition nicht gezeichnet.
Nun meine Frage: Wie kann ich den senkrechten Strich komplett über das JPanel zeichnen, also nicht nur im positiven Bereich?