java - JavaFX 做鬼脸
问题描述
我正在开发一个 Java FX 程序,我必须在其中制作表情符号。我已经做了一个带边框的圆圈,眼睛和皱眉。我的眉毛有问题。我已经设置了一个眉毛,但我似乎无法让另一侧的眉毛与脸的另一侧相匹配。这是我的第一个 JavaFX 程序,所以我的知识非常有限,而且我的教科书也不是很好。任何事情都会有所帮助。眉毛是line1和line2。
package application;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.paint.Color;
import javafx.scene.shape.Arc;
import javafx.scene.shape.ArcType;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
public class TracyAssignment2Chap14 extends Application {
@Override
public void start(Stage primaryStage) {
try {
Circle circle = new Circle();
Circle circle2 = new Circle();
Circle circle3 = new Circle();
circle.setCenterX(220.0);
circle.setCenterY(220.0);
circle.setRadius(190.0);
circle.setFill(Color.YELLOW);
circle.setStrokeWidth(15.0);
circle.setStroke(Color.BLACK);
circle2.setCenterX(300.0);
circle2.setCenterY(215.0);
circle2.setRadius(25.0);
circle2.setFill(Color.BLACK);
circle3.setCenterX(150.0);
circle3.setCenterY(215.0);
circle3.setRadius(25.0);
circle3.setFill(Color.BLACK);
Arc arc = new Arc(220,310,80,60,0,180);
arc.setFill(null);
arc.setStroke(Color.BLACK);
arc.setStrokeWidth(15.0);
arc.setType(ArcType.OPEN);
Line line1= new Line();
line1.setStartX(180.0);
line1.setStartY(180.0);
line1.setEndX(150.0);
line1.setEndY(160.0);
line1.setStrokeWidth(15.0);
line1.setStroke(Color.BLACK);
Line line2 = new Line ();
line2.setStartX(200.0);
line2.setStartY(180.0);
line2.setEndX(270.0);
line2.setEndY(160.0);
line2.setStrokeWidth(15.0);
line2.setStroke(Color.BLACK);
Group root = new Group(circle,circle2,circle3,arc,line1,line2);
Scene scene = new Scene(root,450,450);
primaryStage.setTitle("Emoji Assignment");
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
//add the scene to the stage
primaryStage.setScene(scene);
//show the contents of the stage
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
解决方案
你可以做的一件事就是把所有东西都放在面部中心。我改变了你的一些变量,以便他们的角色是明确的。另外,你发现了什么错误?
示例代码:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package javafxapplication34;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.paint.Color;
import javafx.scene.shape.Arc;
import javafx.scene.shape.ArcType;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
public class TracyAssignment2Chap14 extends Application {
@Override
public void start(Stage primaryStage) {
double faceCenterX = 220.0;
double faceCenterY = 220.0;
double eyeYFromFaceCenter = 5.0;
double eyeXFromFaceCenter = 80.0;
double eyeBrowStartYFromFaceCenter = 40.0;
double eyeBrowStartXFromFaceCenter = 40.0;
double eyeBrowEndYFromFaceCenter = 70.0;
double eyeBrowEndXFromFaceCenter = 80.0;
Circle face = new Circle();
face.setCenterX(faceCenterX);
face.setCenterY(faceCenterY);
face.setRadius(190.0);
face.setFill(Color.YELLOW);
face.setStrokeWidth(15.0);
face.setStroke(Color.BLACK);
Circle leftEye = new Circle();
leftEye.setCenterX(faceCenterX - eyeXFromFaceCenter);
leftEye.setCenterY(faceCenterY - eyeYFromFaceCenter);
leftEye.setRadius(25.0);
leftEye.setFill(Color.BLACK);
Circle rightEye = new Circle();
rightEye.setCenterX(faceCenterX + eyeXFromFaceCenter);
rightEye.setCenterY(faceCenterY - eyeYFromFaceCenter);
rightEye.setRadius(25.0);
rightEye.setFill(Color.BLACK);
Line leftEyebrow = new Line();
leftEyebrow.setStartX(faceCenterX - eyeBrowStartXFromFaceCenter);
leftEyebrow.setStartY(faceCenterY - eyeBrowStartYFromFaceCenter);
leftEyebrow.setEndX(faceCenterX - eyeBrowEndXFromFaceCenter);
leftEyebrow.setEndY(faceCenterY - eyeBrowEndYFromFaceCenter);
leftEyebrow.setStrokeWidth(15.0);
leftEyebrow.setStroke(Color.BLACK);
Line RightEyebrow = new Line();
RightEyebrow.setStartX(faceCenterX + eyeBrowStartXFromFaceCenter);
RightEyebrow.setStartY(faceCenterY - eyeBrowStartYFromFaceCenter);
RightEyebrow.setEndX(faceCenterX + eyeBrowEndXFromFaceCenter);
RightEyebrow.setEndY(faceCenterY - eyeBrowEndYFromFaceCenter);
RightEyebrow.setStrokeWidth(15.0);
RightEyebrow.setStroke(Color.BLACK);
Arc mouth = new Arc(faceCenterX, faceCenterY + 90, 80, 60, 0, 180);//(220,310,80,60,0,180);
mouth.setFill(null);
mouth.setStroke(Color.BLACK);
mouth.setStrokeWidth(15.0);
mouth.setType(ArcType.OPEN);
//
Group root = new Group(face, leftEye, rightEye, leftEyebrow, RightEyebrow, mouth);
Scene scene = new Scene(root, 450, 450);
primaryStage.setTitle("Emoji Assignment");
///scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
//add the scene to the stage
primaryStage.setScene(scene);
//show the contents of the stage
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
推荐阅读
- arrays - 将 2D numpy 数组聚类成更小的 4D numpy 数组
- javascript - 外部 Javascript 数学未在 HTML 中正确更新
- jquery - 为每个评论创建单独的边框 Django Css
- spring - 休眠:自定义查询出现意外令牌错误
- botframework - Azure 中的机器人分析是否适用于通过 Skype for Business 进行的对话?
- javascript - npm start 在浏览器中运行列表目录,而不是 index.js
- bash - 无论参数如何,bash sh 脚本始终执行
- python - 字典中元素的打印顺序
- java - 使用S格式打印实现Formattable的类
- typescript - 系统偏好/打字稿安装