Движение фигуры - Java
Формулировка задачи:
Привет всем. Решил попрактиковать JPanel и GUI, и в задаче необходимо перемещать фигуру по оси Х и У движением мыши. Скрипт работает и перемещает , но только в тот момент когда окно только только появляется, а нужно что-бы фигура двигалась в течение всего времени работы программы.
Вот код:
package mouse;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Frames extends JFrame{
public Frames(String str){
super(str);
Container c = getContentPane();
Panel p = new Panel();
c.add(p);
setSize(500,500);
setVisible(true);
}
}
class Panel extends JPanel{
int x,y;
public Panel(){
addMouseMotionListener(new MouseMotionAdapter(){
public void mouseMoved(MouseEvent e) {
x = e.getX();
y = e.getY();
}
});
}
public void paintComponent(Graphics g){
g.setColor(Color.red);
g.fillOval(x,y,66,66);
}
}Решение задачи: «Движение фигуры»
textual
Листинг программы
package sample; /**
* Copyright (c) 2008, 2012 Oracle and/or its affiliates.
* All rights reserved. Use is subject to license terms.
*/
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.animation.Timeline;
import javafx.animation.TranslateTransition;
import javafx.animation.TranslateTransitionBuilder;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.util.Duration;
/**
* A sample in which a node moves from one location to another over a given
* time.
*
* @related animation/transitions/FadeTransition
* @related animation/transitions/FillTransition
* @related animation/transitions/ParallelTransition
* @related animation/transitions/PathTransition
* @related animation/transitions/PauseTransition
* @related animation/transitions/RotateTransition
* @related animation/transitions/ScaleTransition
* @related animation/transitions/SequentialTransition
* @related animation/transitions/StrokeTransition
* @see javafx.animation.TranslateTransition
* @see javafx.animation.TranslateTransitionBuilder
* @see javafx.animation.Transition
*/
public class TranslateTransitionSample extends Application {
private TranslateTransition translateTransition;
private void init(Stage primaryStage) {
Group root = new Group();
primaryStage.setResizable(false);
primaryStage.setScene(new Scene(root, 450,100));
Circle circle = new Circle(20, Color.CRIMSON);
circle.setTranslateX(20);
circle.setTranslateY(50);
root.getChildren().add(circle);
translateTransition = new TranslateTransition(Duration.seconds(4),circle);
translateTransition.setFromX(50);
translateTransition.setToX(380);
translateTransition.setCycleCount(Timeline.INDEFINITE);
translateTransition.setAutoReverse(true);
translateTransition = TranslateTransitionBuilder.create()
.duration(Duration.seconds(4))
.node(circle)
.fromX(50)
.toX(380)
.cycleCount(Timeline.INDEFINITE)
.autoReverse(true)
.build();
}
public void play() {
translateTransition.play();
}
@Override public void stop() {
translateTransition.stop();
}
public double getSampleWidth() { return 400; }
public double getSampleHeight() { return 100; }
@Override public void start(Stage primaryStage) throws Exception {
init(primaryStage);
primaryStage.show();
play();
}
public static void main(String[] args) { launch(args); }
}