リビジョン 88e074e8
| AnalogClockDrawing/nbproject/build-impl.xml | ||
|---|---|---|
|
<property file="nbproject/project.properties"/>
|
||
|
</target>
|
||
|
<target depends="-pre-init,-init-private,-init-libraries,-init-user,-init-project,-init-macrodef-property" name="-do-init">
|
||
|
<property name="platform.java" value="${java.home}/bin/java"/>
|
||
|
<j2seproject1:property name="platform.home" value="platforms.${platform.active}.home"/>
|
||
|
<j2seproject1:property name="platform.bootcp" value="platforms.${platform.active}.bootclasspath"/>
|
||
|
<j2seproject1:property name="platform.compiler" value="platforms.${platform.active}.compile"/>
|
||
|
<j2seproject1:property name="platform.javac.tmp" value="platforms.${platform.active}.javac"/>
|
||
|
<condition property="platform.javac" value="${platform.home}/bin/javac">
|
||
|
<equals arg1="${platform.javac.tmp}" arg2="$${platforms.${platform.active}.javac}"/>
|
||
|
</condition>
|
||
|
<property name="platform.javac" value="${platform.javac.tmp}"/>
|
||
|
<j2seproject1:property name="platform.java.tmp" value="platforms.${platform.active}.java"/>
|
||
|
<condition property="platform.java" value="${platform.home}/bin/java">
|
||
|
<equals arg1="${platform.java.tmp}" arg2="$${platforms.${platform.active}.java}"/>
|
||
|
</condition>
|
||
|
<property name="platform.java" value="${platform.java.tmp}"/>
|
||
|
<j2seproject1:property name="platform.javadoc.tmp" value="platforms.${platform.active}.javadoc"/>
|
||
|
<condition property="platform.javadoc" value="${platform.home}/bin/javadoc">
|
||
|
<equals arg1="${platform.javadoc.tmp}" arg2="$${platforms.${platform.active}.javadoc}"/>
|
||
|
</condition>
|
||
|
<property name="platform.javadoc" value="${platform.javadoc.tmp}"/>
|
||
|
<condition property="platform.invalid" value="true">
|
||
|
<or>
|
||
|
<contains string="${platform.javac}" substring="$${platforms."/>
|
||
|
<contains string="${platform.java}" substring="$${platforms."/>
|
||
|
<contains string="${platform.javadoc}" substring="$${platforms."/>
|
||
|
</or>
|
||
|
</condition>
|
||
|
<fail unless="platform.home">Must set platform.home</fail>
|
||
|
<fail unless="platform.bootcp">Must set platform.bootcp</fail>
|
||
|
<fail unless="platform.java">Must set platform.java</fail>
|
||
|
<fail unless="platform.javac">Must set platform.javac</fail>
|
||
|
<fail if="platform.invalid">
|
||
|
The J2SE Platform is not correctly set up.
|
||
|
Your active platform is: ${platform.active}, but the corresponding property "platforms.${platform.active}.home" is not found in the project's properties files.
|
||
|
Either open the project in the IDE and setup the Platform with the same name or add it manually.
|
||
|
For example like this:
|
||
|
ant -Duser.properties.file=<path_to_property_file> jar (where you put the property "platforms.${platform.active}.home" in a .properties file)
|
||
|
or ant -Dplatforms.${platform.active}.home=<path_to_JDK_home> jar (where no properties file is used)
|
||
|
</fail>
|
||
|
<available file="${manifest.file}" property="manifest.available"/>
|
||
|
<condition property="splashscreen.available">
|
||
|
<and>
|
||
| ... | ... | |
|
<condition else="" property="javac.profile.cmd.line.arg" value="-profile ${javac.profile}">
|
||
|
<isset property="profile.available"/>
|
||
|
</condition>
|
||
|
<condition else="false" property="jdkBug6558476">
|
||
|
<and>
|
||
|
<matches pattern="1\.[56]" string="${java.specification.version}"/>
|
||
|
<not>
|
||
|
<os family="unix"/>
|
||
|
</not>
|
||
|
</and>
|
||
|
</condition>
|
||
|
<property name="javac.fork" value="${jdkBug6558476}"/>
|
||
|
<property name="jar.index" value="false"/>
|
||
|
<property name="jar.index.metainf" value="${jar.index}"/>
|
||
|
<property name="copylibs.rebase" value="true"/>
|
||
| ... | ... | |
|
<property location="${build.dir}/empty" name="empty.dir"/>
|
||
|
<mkdir dir="${empty.dir}"/>
|
||
|
<mkdir dir="@{apgeneratedsrcdir}"/>
|
||
|
<javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
|
||
|
<javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" executable="${platform.javac}" fork="yes" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
|
||
|
<src>
|
||
|
<dirset dir="@{gensrcdir}" erroronmissingdir="false">
|
||
|
<include name="*"/>
|
||
| ... | ... | |
|
<sequential>
|
||
|
<property location="${build.dir}/empty" name="empty.dir"/>
|
||
|
<mkdir dir="${empty.dir}"/>
|
||
|
<javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
|
||
|
<javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" executable="${platform.javac}" fork="yes" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
|
||
|
<src>
|
||
|
<dirset dir="@{gensrcdir}" erroronmissingdir="false">
|
||
|
<include name="*"/>
|
||
| ... | ... | |
|
<element name="customize" optional="true"/>
|
||
|
<sequential>
|
||
|
<property name="junit.forkmode" value="perTest"/>
|
||
|
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
|
||
|
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" jvm="${platform.java}" showoutput="true" tempdir="${build.dir}">
|
||
|
<test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
|
||
|
<syspropertyset>
|
||
|
<propertyref prefix="test-sys-prop."/>
|
||
| ... | ... | |
|
<element name="customize" optional="true"/>
|
||
|
<sequential>
|
||
|
<property name="junit.forkmode" value="perTest"/>
|
||
|
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
|
||
|
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" jvm="${platform.java}" showoutput="true" tempdir="${build.dir}">
|
||
|
<batchtest todir="${build.test.results.dir}">
|
||
|
<fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
|
||
|
<filename name="@{testincludes}"/>
|
||
| ... | ... | |
|
</fileset>
|
||
|
</union>
|
||
|
<taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
|
||
|
<testng classfilesetref="test.set" failureProperty="tests.failed" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="AnalogClockDrawing" testname="TestNG tests" workingDir="${work.dir}">
|
||
|
<testng classfilesetref="test.set" failureProperty="tests.failed" jvm="${platform.java}" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="AnalogClockDrawing" testname="TestNG tests" workingDir="${work.dir}">
|
||
|
<xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
|
||
|
<propertyset>
|
||
|
<propertyref prefix="test-sys-prop."/>
|
||
| ... | ... | |
|
<element name="customize" optional="true"/>
|
||
|
<sequential>
|
||
|
<property name="junit.forkmode" value="perTest"/>
|
||
|
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
|
||
|
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" jvm="${platform.java}" showoutput="true" tempdir="${build.dir}">
|
||
|
<test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
|
||
|
<syspropertyset>
|
||
|
<propertyref prefix="test-sys-prop."/>
|
||
| ... | ... | |
|
<element name="customize" optional="true"/>
|
||
|
<sequential>
|
||
|
<property name="junit.forkmode" value="perTest"/>
|
||
|
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
|
||
|
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" jvm="${platform.java}" showoutput="true" tempdir="${build.dir}">
|
||
|
<batchtest todir="${build.test.results.dir}">
|
||
|
<fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
|
||
|
<filename name="@{testincludes}"/>
|
||
| ... | ... | |
|
<classpath>
|
||
|
<path path="@{classpath}"/>
|
||
|
</classpath>
|
||
|
<bootclasspath>
|
||
|
<path path="${platform.bootcp}"/>
|
||
|
</bootclasspath>
|
||
|
</nbjpdastart>
|
||
|
</sequential>
|
||
|
</macrodef>
|
||
| ... | ... | |
|
</macrodef>
|
||
|
</target>
|
||
|
<target name="-init-debug-args">
|
||
|
<property name="version-output" value="java version "${ant.java.version}"/>
|
||
|
<exec executable="${platform.java}" outputproperty="version-output">
|
||
|
<arg value="-version"/>
|
||
|
</exec>
|
||
|
<condition property="have-jdk-older-than-1.4">
|
||
|
<or>
|
||
|
<contains string="${version-output}" substring="java version "1.0"/>
|
||
| ... | ... | |
|
<attribute default="${debug.classpath}" name="classpath"/>
|
||
|
<element name="customize" optional="true"/>
|
||
|
<sequential>
|
||
|
<java classname="@{classname}" dir="${work.dir}" fork="true">
|
||
|
<java classname="@{classname}" dir="${work.dir}" fork="true" jvm="${platform.java}">
|
||
|
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
|
||
|
<jvmarg line="${debug-args-line}"/>
|
||
|
<jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
|
||
| ... | ... | |
|
<attribute default="jvm" name="jvm"/>
|
||
|
<element name="customize" optional="true"/>
|
||
|
<sequential>
|
||
|
<java classname="@{classname}" dir="${work.dir}" fork="true">
|
||
|
<java classname="@{classname}" dir="${work.dir}" fork="true" jvm="${platform.java}">
|
||
|
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
|
||
|
<jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
|
||
|
<redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
|
||
| ... | ... | |
|
<j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
|
||
|
<echo level="info">To run this application from the command line without Ant, try:</echo>
|
||
|
<property location="${dist.jar}" name="dist.jar.resolved"/>
|
||
|
<echo level="info">java -jar "${dist.jar.resolved}"</echo>
|
||
|
<echo level="info">${platform.java} -jar "${dist.jar.resolved}"</echo>
|
||
|
</target>
|
||
|
<target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen" if="do.archive" name="-do-jar-jar" unless="do.mkdist">
|
||
|
<j2seproject1:jar manifest="${tmp.manifest.file}"/>
|
||
| ... | ... | |
|
</not>
|
||
|
</and>
|
||
|
</condition>
|
||
|
<exec executable="${platform.java}" failonerror="false" outputproperty="platform.version.output">
|
||
|
<arg value="-version"/>
|
||
|
</exec>
|
||
|
<condition else="" property="bug5101868workaround" value="*.java">
|
||
|
<matches pattern="1\.[56](\..*)?" string="${java.version}"/>
|
||
|
<matches multiline="true" pattern="1\.[56](\..*)?" string="${platform.version.output}"/>
|
||
|
</condition>
|
||
|
<javadoc additionalparam="-J-Dfile.encoding=${file.encoding} ${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
|
||
|
<javadoc additionalparam="-J-Dfile.encoding=${file.encoding} ${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" executable="${platform.javadoc}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
|
||
|
<classpath>
|
||
|
<path path="${javac.classpath}"/>
|
||
|
</classpath>
|
||
| AnalogClockDrawing/nbproject/genfiles.properties | ||
|---|---|---|
|
build.xml.stylesheet.CRC32=8064a381@1.74.2.48
|
||
|
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||
|
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||
|
nbproject/build-impl.xml.data.CRC32=4e56288b
|
||
|
nbproject/build-impl.xml.script.CRC32=9689ce15
|
||
|
nbproject/build-impl.xml.stylesheet.CRC32=876e7a8f@1.74.2.48
|
||
|
nbproject/build-impl.xml.data.CRC32=41adea56
|
||
|
nbproject/build-impl.xml.script.CRC32=09e815e2
|
||
|
nbproject/build-impl.xml.stylesheet.CRC32=876e7a8f@1.75.1.48
|
||
| AnalogClockDrawing/nbproject/project.properties | ||
|---|---|---|
|
javafx.application.implementation.version=1.0
|
||
|
javafx.binarycss=false
|
||
|
javafx.classpath.extension=\
|
||
|
${java.home}/lib/javaws.jar:\
|
||
|
${java.home}/lib/deploy.jar:\
|
||
|
${java.home}/lib/plugin.jar
|
||
|
${platforms.JDK_1.8u40.home}/jre/lib/javaws.jar:\
|
||
|
${platforms.JDK_1.8u40.home}/jre/lib/deploy.jar:\
|
||
|
${platforms.JDK_1.8u40.home}/jre/lib/plugin.jar
|
||
|
javafx.deploy.adddesktopshortcut=false
|
||
|
javafx.deploy.addstartmenushortcut=false
|
||
|
javafx.deploy.allowoffline=true
|
||
| ... | ... | |
|
meta.inf.dir=${src.dir}/META-INF
|
||
|
mkdist.disabled=false
|
||
|
native.bundling.enabled=false
|
||
|
platform.active=default_platform
|
||
|
platform.active=JDK_1.8u40
|
||
|
project.license=mit
|
||
|
run.classpath=\
|
||
|
${dist.jar}:\
|
||
| AnalogClockDrawing/nbproject/project.xml | ||
|---|---|---|
|
</buildExtensions>
|
||
|
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
|
||
|
<name>AnalogClockDrawing</name>
|
||
|
<explicit-platform explicit-source-supported="true"/>
|
||
|
<source-roots>
|
||
|
<root id="src.dir"/>
|
||
|
</source-roots>
|
||
| AnalogClockDrawing/src/analogclock/AnalogClockDrawing.java | ||
|---|---|---|
|
*/
|
||
|
package analogclock;
|
||
|
|
||
|
import java.io.File;
|
||
|
import java.io.IOException;
|
||
|
import java.time.LocalTime;
|
||
|
import java.util.List;
|
||
|
import static java.util.stream.Collectors.toList;
|
||
|
import java.util.stream.IntStream;
|
||
|
import javafx.animation.Animation;
|
||
|
import javafx.animation.KeyFrame;
|
||
|
import javafx.animation.KeyValue;
|
||
|
import javafx.animation.Timeline;
|
||
|
import javafx.animation.Interpolator;
|
||
|
import javafx.animation.RotateTransition;
|
||
|
import javafx.application.Application;
|
||
|
import javafx.embed.swing.SwingFXUtils;
|
||
|
import javafx.scene.Group;
|
||
|
import javafx.scene.Node;
|
||
|
import javafx.scene.Scene;
|
||
|
import javafx.scene.image.WritableImage;
|
||
|
import javafx.scene.layout.Pane;
|
||
|
import javafx.scene.layout.StackPane;
|
||
|
import javafx.scene.paint.Color;
|
||
|
import javafx.scene.paint.CycleMethod;
|
||
|
import javafx.scene.paint.RadialGradient;
|
||
| ... | ... | |
|
import javafx.scene.transform.Rotate;
|
||
|
import javafx.stage.Stage;
|
||
|
import javafx.util.Duration;
|
||
|
import javax.imageio.ImageIO;
|
||
|
|
||
|
/**
|
||
|
* アナログ時計(長針、短針、秒針)を表示するプログラム。
|
||
| ... | ... | |
|
public class AnalogClockDrawing extends Application {
|
||
|
|
||
|
private static final double UNIT_SIZE = 100d;
|
||
|
private Rotate secondsHandRotation;
|
||
|
private Rotate minuteHandRotation;
|
||
|
private Rotate hourHandRotation;
|
||
|
|
||
|
@Override
|
||
|
public void start(Stage primaryStage) {
|
||
|
|
||
|
Group root = new Group();
|
||
|
StackPane root = new StackPane();
|
||
|
Node clockDial = createClockDial();
|
||
|
Node hourHand = createHourHand();
|
||
|
Node minuteHand = createMinuteHand();
|
||
|
Node secondHand = createSecondHand();
|
||
|
Node centerPoint = createCenter();
|
||
|
|
||
|
root.getChildren().addAll(
|
||
|
createDial(),
|
||
|
createMinuteHand(),
|
||
|
createHourHand(),
|
||
|
createSecondsHand(),
|
||
|
createTickMarks(),
|
||
|
createCenter()
|
||
|
clockDial, hourHand, minuteHand, secondHand, centerPoint
|
||
|
);
|
||
|
|
||
|
LocalTime time = LocalTime.now();
|
||
|
Timeline secondsAnimation = createRotateTimeline(Duration.seconds(60), getSecondsAngle(time), secondsHandRotation);
|
||
|
secondsAnimation.play();
|
||
|
Timeline minuteAnimation = createRotateTimeline(Duration.minutes(60), getMinuteAgnel(time), minuteHandRotation);
|
||
|
minuteAnimation.play();
|
||
|
Timeline hourAnimation = createRotateTimeline(Duration.hours(12), getHourAngle(time), hourHandRotation);
|
||
|
hourAnimation.play();
|
||
|
|
||
|
Scene scene = new Scene(root, UNIT_SIZE * 2, UNIT_SIZE * 2);
|
||
|
WritableImage snapshot = scene.snapshot(null);
|
||
|
try {
|
||
|
ImageIO.write(SwingFXUtils.fromFXImage(snapshot, null), "png", new File("clockSecondsHand.png"));
|
||
|
} catch (IOException ex) {
|
||
|
RotateTransition secondsTransition = createRotateTransition(Duration.seconds(60), secondHand, getSecondsAngle(time));
|
||
|
secondsTransition.play();
|
||
|
RotateTransition minuteTransition = createRotateTransition(Duration.minutes(60), minuteHand, getMinuteAgnel(time));
|
||
|
minuteTransition.play();
|
||
|
RotateTransition hourTransition = createRotateTransition(Duration.hours(12), hourHand, getHourAngle(time));
|
||
|
hourTransition.play();
|
||
|
|
||
|
}
|
||
|
primaryStage.setTitle("Hello World!");
|
||
|
Scene scene = new Scene(root);
|
||
|
|
||
|
primaryStage.setTitle("Clock");
|
||
|
primaryStage.setScene(scene);
|
||
|
primaryStage.show();
|
||
|
}
|
||
|
|
||
|
Timeline createRotateTimeline(Duration duration, int startAngle, Rotate rotate) {
|
||
|
Timeline timeline = new Timeline();
|
||
|
rotate.setAngle(startAngle);
|
||
|
timeline.getKeyFrames().add(
|
||
|
new KeyFrame(duration, new KeyValue(rotate.angleProperty(), startAngle + 360))
|
||
|
);
|
||
|
timeline.setCycleCount(Animation.INDEFINITE);
|
||
|
return timeline;
|
||
|
RotateTransition createRotateTransition(Duration duration, Node node, int startAngle) {
|
||
|
RotateTransition rt = new RotateTransition(duration, node);
|
||
|
rt.setFromAngle(startAngle);
|
||
|
rt.setByAngle(360);
|
||
|
rt.setCycleCount(Animation.INDEFINITE);
|
||
|
rt.setInterpolator(Interpolator.LINEAR);
|
||
|
return rt;
|
||
|
}
|
||
|
|
||
|
Node createClockDial() {
|
||
|
Pane pane = new Pane();
|
||
|
pane.getChildren().addAll(createCircle(), createTickMarks());
|
||
|
return pane;
|
||
|
}
|
||
|
|
||
|
// 時計の文字盤(背景)を作成する
|
||
|
Node createDial() {
|
||
|
Node createCircle() {
|
||
|
RadialGradient gradient = new RadialGradient(
|
||
|
0, 0, 0.5, 0.5, 0.5, true, CycleMethod.NO_CYCLE,
|
||
|
new Stop(0.8, Color.WHITE), new Stop(0.9, Color.BLACK), new Stop(0.95, Color.WHITE), new Stop(1.0, Color.BLACK)
|
||
| ... | ... | |
|
|
||
|
// 時計の短針を作成する
|
||
|
Node createHourHand() {
|
||
|
hourHandRotation = new Rotate(0, UNIT_SIZE, UNIT_SIZE);
|
||
|
Pane pane = new Pane();
|
||
|
pane.setPrefSize(UNIT_SIZE * 2, UNIT_SIZE * 2);
|
||
|
Node hourHand = createHourOrMinuteHand(UNIT_SIZE * 0.4, Color.BLACK);
|
||
|
hourHand.getTransforms().add(hourHandRotation);
|
||
|
return hourHand;
|
||
|
pane.getChildren().add(hourHand);
|
||
|
return pane;
|
||
|
}
|
||
|
|
||
|
// 時計の長針を作成する
|
||
|
Node createMinuteHand() {
|
||
|
minuteHandRotation = new Rotate(0, UNIT_SIZE, UNIT_SIZE);
|
||
|
Pane pane = new Pane();
|
||
|
pane.setPrefSize(UNIT_SIZE * 2, UNIT_SIZE * 2);
|
||
|
Node minuteHand = createHourOrMinuteHand(UNIT_SIZE * 0.2, Color.BLACK);
|
||
|
minuteHand.getTransforms().add(minuteHandRotation);
|
||
|
return minuteHand;
|
||
|
pane.getChildren().add(minuteHand);
|
||
|
return pane;
|
||
|
}
|
||
|
|
||
|
// 時計の秒針を作成する
|
||
|
Node createSecondsHand() {
|
||
|
Node createSecondHand() {
|
||
|
Pane pane = new Pane();
|
||
|
pane.setPrefSize(UNIT_SIZE * 2, UNIT_SIZE * 2);
|
||
|
Line line = new Line(UNIT_SIZE, UNIT_SIZE * 1.1, UNIT_SIZE, UNIT_SIZE * 0.2);
|
||
|
secondsHandRotation = new Rotate(0, UNIT_SIZE, UNIT_SIZE);
|
||
|
line.getTransforms().add(secondsHandRotation);
|
||
|
return line;
|
||
|
pane.getChildren().add(line);
|
||
|
return pane;
|
||
|
}
|
||
|
|
||
|
// 時計の針を作成する
|
||
| AnalogClockDrawing/test/analogclock/AnalogClockDrawingTest.java | ||
|---|---|---|
|
import org.junit.Test;
|
||
|
|
||
|
/**
|
||
|
* 時計のパーツを描画してファイルに出力する機能を持つ
|
||
|
*
|
||
|
* @author TAKAHASHI,Toru
|
||
|
*/
|
||
| ... | ... | |
|
}
|
||
|
|
||
|
@Test
|
||
|
public void testCreateDial() throws IOException {
|
||
|
createSceneAndCapture(sut.createDial(), "clockdial.png");
|
||
|
public void testCreateClockDial() throws IOException {
|
||
|
createSceneAndCapture(sut.createClockDial(), "clockdial.png");
|
||
|
}
|
||
|
|
||
|
@Test
|
||
|
public void testCreateCircle() throws IOException {
|
||
|
createSceneAndCapture(sut.createCircle(), "clockCircle.png");
|
||
|
}
|
||
|
|
||
|
@Test
|
||
| ... | ... | |
|
|
||
|
@Test
|
||
|
public void testCreateSecondsHand() {
|
||
|
createSceneAndCapture(sut.createSecondsHand(), "clockSecondsHand.png");
|
||
|
createSceneAndCapture(sut.createSecondHand(), "clockSecondsHand.png");
|
||
|
}
|
||
|
|
||
|
@Test
|
||
アニメーションの実現にTimeLineではなくRotateTransitionを使うように修正した