Так как я только недавно начал работать с JavaFX, то многое еще не знаю. Я хотел написать программу на JavaFX с помощью Canvas API, которая рисует систему координат и график введенной функции. Так же с помощью мыши хочу перемещать положение экрана (координатную систему вместе с графиком). Нарисовать я смог. Но не как не получается всю эту область перемещать так, чтобы и новые границы появлялись автоматически нарисовывались. Например, если график функции вначале не виден, то, перетаския положение, могу до не него добраться. Вот это я хочу сделать. Надеюсь, что доходчиво объяснил свою проблему.
На обычном Java JPanel получается и нарисовать, и перемещать область с помощью мыши. Вот, собственно, этот код:
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MouseDragTest extends JPanel {
private static final int WIDTH = 640;
private static final int HEIGHT = 480;
private Point origin = new Point(WIDTH / 2, HEIGHT / 2);
private Point mousePt;
private double einheit = 40;
private int x_start, y_start;
public MouseDragTest() {
this.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
label = new Label("Move");
this.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
mousePt = e.getPoint();
repaint();
}
});
this.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
int dx = e.getX() - mousePt.x;
int dy = e.getY() - mousePt.y;
origin.setLocation(origin.x + dx, origin.y + dy);
mousePt = e.getPoint();
repaint();
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(WIDTH, HEIGHT);
}
public double f(double x) {
//return 3/(Math.pow(x, 2));
return Math.cos(x);
}
public void draw(Graphics g, int i, int j) {
if ((j > 0) && (j < HEIGHT) && (y_start > 0) && (y_start < HEIGHT)) {
g.drawLine(x_start, y_start, i, j);
}
x_start = i;
y_start = j;
}
public void coordinateSystem(Graphics g) {
g.drawLine(5, origin.y, WIDTH - 5, origin.y); // x_Achse
g.drawLine(origin.x, 5, origin.x, HEIGHT - 5); // y_Achse
System.out.println("Breite " + WIDTH);
//Positive x- und y-Achsen
for (int i = 1; i < WIDTH; i++) {
g.drawLine(origin.x + (int) einheit * i, origin.y - 2,
origin.x + (int) einheit * i, origin.y + 2); // Einheiten /Markierungen auf der positiven x_Achse
g.drawString("" + i, (origin.x + (int) einheit * i) - 3, origin.y + 15); // //Textbeschriftungen auf der positiven x_Achse
}
for (int i = 1; i < HEIGHT; i++) {
g.drawLine(origin.x - 2, origin.y - (int) einheit * i,
origin.x + 2, origin.y - (int) einheit * i); // Einheiten / Markierungen auf der positiven y_Achse
g.drawString("" + i, origin.x - 15, (origin.y - (int) einheit * i) + 3); // Textbeschriftungen auf der positiven y_Achse
}
//Negative x- und y-Achsen
for (int i = 1; i < WIDTH; i++) {
g.drawLine(origin.x + (int) einheit * (-i), origin.y - 2,
origin.x + (int) einheit * (-i), origin.y + 2); // Einheiten /Markierungen auf der positiven x_Achse
g.drawString("" + (-i), (origin.x + (int) einheit * (-i)) - 6, origin.y + 15); // //Textbeschriftungen auf der negativen x_Achse
}
for (int i = 1; i < HEIGHT; i++) {
g.drawLine(origin.x - 2, origin.y - (int) einheit * (-i),
origin.x + 2, origin.y - (int) einheit * (-i)); // Einheiten / Markierungen auf der positiven y_Achse
g.drawString("" + (-i), origin.x - 18, (origin.y - (int) einheit * (-i)) + 6); // Textbeschriftungen auf der negativen y_Achse
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
double x, y;
int j;
coordinateSystem(g);
x = (0 - origin.x) / einheit; // Erster Punkt zum Zeichnen
y = f(x);
j = (int) Math.round(origin.y - y * einheit);
x_start = 0;
y_start = j;
for (int i = 1; i < WIDTH; i++) {
x = (i - origin.x) / einheit;
y = f(x);
j = (int) Math.round(origin.y - y * einheit);
draw(g, i, j);
}
}
}
Как мне теперь этот код перевести на JavaFX?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Подскажите, пожалуйста, необходим ли вызов Bitmaprecycle() в таком случае:
Я пытаюсь добавить SearchView в приложение