package graphtest; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.Arc2D; import java.awt.image.BufferedImage; import java.util.Timer; import java.util.TimerTask; import javax.swing.JFrame; public class Graphtest extends JFrame { private int x=10, // початкові координати ЛВК червоного круга y=550, dx=10, // приріст абсциси за зміну одного кадру vy=-20, // початкова швидкість g=1; // прискорення земного тяжіння Timer timer; public Graphtest (String s) { super(s); setSize(565, 620); // вказати розміри вікна setVisible(true); // зробити вікно видимим setDefaultCloseOperation(EXIT_ON_CLOSE); // припинити виконання програми при закритті вікна timer = new Timer(); timer.schedule(new Step(), 0, //initial delay 1*100); //subsequent rate } @Override public void paint (Graphics g) { Graphics2D g2 = (Graphics2D) g; int w = getSize().width, // отримати ширину вікна h = getSize().height; // отримати висоту вікна BufferedImage bi = (BufferedImage) createImage(w, h);// створити буфер зображення Graphics2D big = bi.createGraphics(); // отримати його графічний контекст big.setColor(new Color(0,88,0)); // темно зелений колір малювання big.fillRect(0, 0, w, h); // заповнити темно зеленим тлом big.setColor(Color.red); // червоний колір малювання big.fill(new Arc2D.Double(x,y,10,10,0,360,Arc2D.OPEN)); // намалювати червоний круг g2.drawImage(bi, 0, 0, this); // вивести зображення-буфер на экран } class Step extends TimerTask { @Override public void run() { repaint(); x +=dx; // рівномірний рух по горизонталі y +=vy+g/2; // рівномірне прискорення по вертикалі vy+=g; // рівномірне прискорення по вертикалі if (y>560) {y=1200-y; vy=-vy;}// імітація відбивання від землі } } public static void main(String[] args) { Graphtest f = new Graphtest("Модель дисків, що злипаються"); } }