Salve a tutti, per un progetto devo disegnare il grafico di una funzione dal punto a al punto b. Questo mi è riuscito.. solo che vorrei inserire gli assi cartesiani nel disegno, anche se la funzione in quell'intervallo non li tocca... Ho pensato allora di creare gli assi centrati in un pannello e disegnare la funzione rispettivamente ad essi. Il problema è che le dimensioni del pannello rimangono fisse a |b-a|e quindi una parte non si vede. Mi piacerebbe far si che si possa scorrere nel grafico per vederla tutta, o con delle barre di scrolling oppure spostandosi nel disegno con la "manina".. è possibile? Perchè ho provato a utilizzare uno scrollable panel ma non funziona, e non riesco neanche a dare le dimensioni che voglio al JPanel, consigli?
il codice è questo (senza importazioni):
public class FunctionPanel extends JPanel{
private double a;
private double b;
private double n;
private Function f;
public FunctionPanel(Function f, double a, double b, int n){
super();
this.a=a;
this.b=b;
this.n=n;
this.f=f;
this.setBackground(Color.WHITE);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
double h = (b-a)/n;
int i=0;
double x1, x2, y1, y2;
Graphics2D g2 = (Graphics2D) g;
Line2D lin;
g.drawLine(this.getWidth()/2, 0, this.getWidth()/2, this.getHeight());
g.drawLine(0, this.getHeight()/2, this.getWidth(), this.getHeight()/2);
while (i<=n){
x1 = a+i*h;
y1 = f.getF(x1);
x2 = x1+h;
y2 = f.getF(x2);
x1 = (this.getSize().width*x1)/(b-a);
x2 = (this.getSize().width*x2)/(b-a);
y1 = (this.getSize().width*y1)/(b-a);
y2 = (this.getSize().width*y2)/(b-a);
lin = new Line2D.Double(x1+this.getWidth()/2,-y1+this.getHeight()/2,x2+this.getWidth()/2,-y2+this.getHeight()/2);
g2.setColor(Color.ORANGE);
g2.draw(lin);
i++;
}
}
}
Grazie mille![]()

Rispondi quotando

