Hi zusammen. Ich brauche eure Hilfe :/ Ich komm hier nicht weiter.
Ich möchte Werte in ein JPanel einzeichnen. Dabei sind die Werte Als Boxen repräsentiert, deren Höhe dem Wert entsppricht. Um dies zu erreichen skaliere ich die Höhe auf meinen Wertebereich (Also die Y-Achse)
Die X-Achse skaliere ich nicht.
Nun möchte ich immer die X-Achse angezeigt bekommen. Das klappt aber nicht, wenn alle Werte >0 bzw <0 sind.
Bei mir zeichnet es dann einfach die X-Achse nicht und ich verstehe nicht wieso.
Wenn ich positive und negative Werte habe dann klappt es allerdings.
Habt ihr mir einen Tip was ich an der skalierung falsch mache?
Ich möchte Werte in ein JPanel einzeichnen. Dabei sind die Werte Als Boxen repräsentiert, deren Höhe dem Wert entsppricht. Um dies zu erreichen skaliere ich die Höhe auf meinen Wertebereich (Also die Y-Achse)
Die X-Achse skaliere ich nicht.
Nun möchte ich immer die X-Achse angezeigt bekommen. Das klappt aber nicht, wenn alle Werte >0 bzw <0 sind.
Bei mir zeichnet es dann einfach die X-Achse nicht und ich verstehe nicht wieso.
Wenn ich positive und negative Werte habe dann klappt es allerdings.
Java:
// width und height ist von dem Panel
public void paint(Graphics g, int width, int height, LayoutTracker arg3) {
final Graphics2D g2dmain = (Graphics2D) g.create();
final Graphics2D g2help = (Graphics2D) g.create();
g2help.setColor(Color.WHITE);
g2help.fillRect(0, 0, width, height);
/* get the component size */
final Insets ins = pps.getInsets();
double maxy = maxValue;
double miny = minvalue;
double maxx = width;
double minx = 0;
// Falls alle Werte <0 bzw >0 dann Wertebereich auf 0 verschieben
if(maxy<0) maxy = 0;
else if(miny >0) miny = 0;
if(miny==0 && maxy==0)
{
maxy=1;
miny=-1;
}
/* transform view into codomain */
g2dmain.translate(ins.left, ins.top);
g2dmain.scale(1, -(height-1) / Math.abs(maxy - miny));
g2dmain.translate(minx, -maxy);
/* assign a 1px stroke */
g2dmain.setStroke(new BasicStroke(1f / width, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND));
final Rectangle rect = pps.getVisibleRect();
// hier zeichne ich meine Boxen in das Panel. Die Höhe ist entpsprechend dem Wert der Daten an der
//X-Position
drawPlot(g2dmain, g2help, rect);
// Zeichne X-Achse:
final Line2D.Double zeroLine = new Line2D.Double();
g2dmain.setColor(Color.black);
zeroLine.setLine(0., 0., width,0.);
g2dmain.draw(zeroLine);
}
Habt ihr mir einen Tip was ich an der skalierung falsch mache?
Zuletzt bearbeitet von einem Moderator: