Код ниже рисует линию, каждую секунду новую.
Как можно сделать, чтобы новая линия добавлялась к старой?
То есть хочу видеть через условно двадцать секунд - двадцать линий.
1) Нужно добавлять значения для отрисовки в массив и каждый раз перерисовывать, как в закомментированной части,
2) или можно использовать старый canvas и рисовать поверх его.
Если второй вариант то как это можно сделать?
package draw;
import javax.swing.*;
import java.awt.*;
public class Test {
static class MyCanvas extends Canvas {
// условный массив со значениями
// int4[] values = new int4[];
// public void addValue(...) { // };
static int x1 = 10;
static int x2 = 20;
public void paint(Graphics g) {
g.setColor(Color.BLACK);
// for (int4 val: values) {
// g.drawLine(val[0], val[1], val[2], val[3])
// }
g.drawLine(x1, x2, 200,200);
}
}
public static void main(String[] args) throws InterruptedException {
JFrame frame = new JFrame("nameOf");
frame.setSize(200,200);
Canvas canvas = new MyCanvas();
frame.add(canvas);
frame.setVisible(true);
while (true) {
Thread.sleep(1000);
// canvas.addValue(...);
MyCanvas.x1 = (int)(Math.random() * 100);
MyCanvas.x2 = (int)(Math.random() * 100);
canvas.repaint();
}
}
}
Нашел примерное решение, без объявления коллекции. Использовать в цикле:
canvas.getGraphics().drawLine(x1,x2,y1,y2);
Только результат не сохранится, если вызвать метод .repaint()
(например, изменить размер окна, что автоматически вызовет перерисовку)
package draw;
import javax.swing.*;
import java.awt.*;
import java.util.Scanner;
public class Test {
static class MyCanvas extends Canvas {
public void paint(Graphics g) {
g.setColor(Color.BLACK);
g.drawOval((int)(Math.random() * 100),(int)(Math.random() * 100),(int)(Math.random() * 100),(int)(Math.random() * 100));
}
}
public static void main(String[] args) {
MyCanvas canvas = new MyCanvas();
JFrame frame = new JFrame("nameOf");
frame.setSize(200,200);
frame.add(canvas);
frame.setVisible(true);
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
canvas.getGraphics().drawLine((int)(Math.random() * 100),(int)(Math.random() * 100), 200,200);
System.out.println("---");
scanner.nextLine();
}
}
}
В данном примере, для отрисовки новой линии, нужно ввести любое значение с клавиатуры в консоль.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Нужно удалить повторяющиеся элементы связного списка спискаВывести сначала исходный связный список, затем уже с удалением
Это игра с переставлением шариковИгра состоит из трёх классов : Ball , Hole и MainWindow