- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的任务是制作一个笑脸,当窗口调整大小时,它会适合边框。我可以让所有其他形状来做到这一点,但是当我尝试使用多边形时,我不知道该怎么做。因此,如果我能获得有关如何从 javafx.node.shape.Shape 包调整多边形大小的帮助,那就太好了。
一如既往地感谢您及时的帮助,如果我违反了许多规则,我深表歉意。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.scene.shape.Polygon;
import javafx.scene.shape.Ellipse;
import javafx.scene.shape.*;
public class smiley extends Application{
@Override // Override the start method in the Application class
public void start(Stage primaryStage) {
Pane pane = new Pane();
// Create a circle and set its properties
Circle circle = new Circle();
circle.centerXProperty().bind(pane.widthProperty().divide(2));
circle.centerYProperty().bind(pane.heightProperty().divide(2));
circle.setRadius(50);
circle.setStroke(Color.BLACK);
circle.setFill(null);
Polygon nose = new Polygon();
nose.getPoints().addAll(new Double[]{ 100.0, 90.0, 90.0, 120.0, 110.0, 120.0 });
nose.setStroke(Color.BLACK);
nose.setFill(null);
Ellipse leftEye = new Ellipse();
leftEye.centerXProperty().bind(pane.widthProperty().divide(2).add(20));
leftEye.centerYProperty().bind(pane.heightProperty().divide(2).subtract(20));
leftEye.setRadiusX(15.0f);
leftEye.setRadiusY(10.0f);
leftEye.setStroke(Color.BLACK);
leftEye.setFill(null);
Ellipse rightEye = new Ellipse();
rightEye.centerXProperty().bind(pane.widthProperty().divide(2).subtract(20));
rightEye.centerYProperty().bind(pane.heightProperty().divide(2).subtract(20));
rightEye.setRadiusX(15.0f);
rightEye.setRadiusY(10.0f);
rightEye.setStroke(Color.BLACK);
rightEye.setFill(null);
Circle leftPupil = new Circle();
leftPupil.centerXProperty().bind(pane.widthProperty().divide(2).add(20));
leftPupil.centerYProperty().bind(pane.heightProperty().divide(2).subtract(20));
leftPupil.setRadius(7);
leftPupil.setStroke(Color.BLACK);
Circle rightPupil = new Circle();
rightPupil.centerXProperty().bind(pane.widthProperty().divide(2).subtract(20));
rightPupil.centerYProperty().bind(pane.heightProperty().divide(2).subtract(20));
rightPupil.setRadius(7);
rightPupil.setStroke(Color.BLACK);
Arc smile = new Arc();
smile.centerXProperty().bind(pane.widthProperty().divide(2));
smile.centerYProperty().bind(pane.heightProperty().divide(2).add(20));
smile.setRadiusX(25.0f);
smile.setRadiusY(10.0f);
smile.setStartAngle(180.0f);
smile.setLength(180.0f);
smile.setType(ArcType.OPEN);
smile.setFill(null);
smile.setStroke(Color.BLACK);
pane.getChildren().add(circle);
pane.getChildren().add(nose);
pane.getChildren().add(leftEye);
pane.getChildren().add(rightEye);
pane.getChildren().add(leftPupil);
pane.getChildren().add(rightPupil);
pane.getChildren().add(smile);
// Create a scene and place it in the stage
Scene scene = new Scene(pane, 200, 200);
primaryStage.setTitle("Assignment 14"); // Set the stage title
primaryStage.setScene(scene); // Place the scene in the stage
primaryStage.show(); // Display the stage
}
}
最佳答案
从您的代码来看,您似乎并不是在谈论笑脸随着舞台的增大/缩小,而是在舞台调整大小时保持在舞台的中心。除了多边形 Nose 之外,所有笑脸部件都会这样做。 Nose 不这样做的原因是您已经使用固定在场景根部的 Pane 的坐标系定义了带有点的多边形。 如果您确实希望调整脸部大小而不仅仅是移动,那么您的方法将涉及相同概念的稍微不同的应用,特别是方法 2 的应用。
我可以想到两种方法来实现让 Nose 与脸部其他部分一起移动的目标,我将按优先顺序列出我的方法:
方法 1:专门针对面部的 Pane 。不是让笑脸的每个子部分定义其相对于整个场景的位置,而是让笑脸的所有部分定义其相对于 Pane 的位置,该 Pane 的大小刚好足以容纳笑脸的外圆。然后定义该 Pane 相对于场景根 Pane 的位置。
我更喜欢这种方法的原因是它具有更好的封装性。例如,如果您后来决定希望整个笑脸在屏幕上移动,您只需定义代码来移动容器 Pane 而不是所有单独的部分。同样,添加新片段只需要在该 Pane 的坐标系中工作,因此您不必考虑确保它在整个场景中适当移动。
仅将脸部圆圈添加到此类 smileyPane
的示例代码片段。多边形和其余部分留作练习:-)
//This pane is the root of the scene, and stretches with the
//stage. It will hold the smileyPane.
Pane rootPane = new Pane();
double smileyRadius = 50.0;
//This pane is just big enough to hold the outer circle of
//the smiley face. It holds all the individual pieces that
//make up the face.
Pane smileyPane = new Pane();
rootPane.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
double smileyPaneStartX = (newValue.doubleValue()/2)-(smileyRadius);
smileyPane.setLayoutX(smileyPaneStartX);
}
});
rootPane.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
double smileyPaneStartY = (newValue.doubleValue()/2)-(smileyRadius);
smileyPane.setLayoutY(smileyPaneStartY);
}
});
方法 2:监听外部 Pane 尺寸,用于重新计算 Nose 的位置。基本上,您定义一些在外部 Pane 的大小发生变化时运行的代码,以便您可以重新计算 Nose /多边形的正确位置。
Polygon nose = new Polygon();
nose.setStroke(Color.BLACK);
nose.setFill(null);
//Add initial nose position points
nose.getPoints().addAll(new Double[]{ 100.0, 90.0, 90.0, 120.0, 110.0, 120.0 });
pane.widthProperty().addListener(new ChangeListener<Number>(){
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
//The overall pane width changed. Recalculate the position of nose points
//Actual position calculation left as exercise.
}
});
//Similar thing needs to be done with height. Left as exercise.
<小时/>我遗漏了一些部分,故意省略了整个解决方案。这显然是家庭作业。这应该足以让您开始,但希望您能通过自己填写这些内容学到一些东西!
关于java - 如何调整多边形的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33989761/
这个问题在这里已经有了答案: C sizeof a passed array [duplicate] (7 个回答) 8年前关闭。 在一个函数中,我声明了一个数组: int char_count_ar
简而言之,文件系统如何与 block 设备通信? 最佳答案 我对 block 大小不太了解。我认为 ext4(Linux)的文件系统的 block 大小是 4KB,考虑到现代处理器的页面大小(4KB)
我知道 tinyint(1) 和 tinyint(2) 具有相同的存储空间范围。 唯一的区别是显示宽度不同。这是否意味着 tinyint(1) 将存储所有类型的整数但只正确显示 0 到 9 的范围?而
今晚我已经研究了以下代码几个小时,但我只是摸不着头脑。 当使用函数从标准输入填充数组时,我不断收到“大小 8 的无效写入”和“大小 8 的无效读取”。 如有任何帮助,我们将不胜感激...我知道 Sta
我有一个 valgrind 错误,我不知道如何摆脱它们: ==5685== Invalid read of size 8 ==5685== at 0x4008A1: main (in /home
我对 Hadoop 的概念有点困惑。 Hadoop block 大小、拆分大小和 block 大小 之间有什么区别? 提前致谢。 最佳答案 block 大小和 block 大小相同。 拆分大小 可能与
我想不出一个好的标题,所以希望可以。 我正在做的是创建一个离线 HTML5 webapp。 “出于某些原因”我不希望将某些文件放在缓存 list 中,而是希望将内容放在 localStorage 中。
无法将 xamarin apk 大小减少到 80 MB 以下,已执行以下操作: 启用混淆器 配置:发布 平台:事件(任何 CPU)。 启用 Multi-Dex:true 启用开发人员检测(调试和分析)
我正在开发一个程序,需要将大量 csv 文件(数千个)加载到数组中。 csv 文件的尺寸为 45x100,我想创建一个尺寸为 nx45x100 的 3-d 数组。目前,我使用 pd.read_csv(
Hello World 示例的 React Native APK 大小约为 20M (in recent versions),因为支持不同的硬件架构(ARMv7、ARMv8、X86 等),而同一应用程
我有一个包含 n 个十进制元素的列表,其中每个元素都是两个字节长。 可以说: x = [9000 , 5000 , 2000 , 400] 这个想法是将每个元素拆分为 MSB 和 LSB 并将其存储在
如何设置 GtKTextView 的大小?我想我不能使用 gtk_widget_set_usize。 最佳答案 您不能直接控制小部件的大小,而是由其容器完成。您可以使用 gtk_widget_set_
这个问题在这里已经有了答案: c++ sizeof() of a class with functions (7 个答案) 关闭 5 年前。 结果是 12。 foobar 函数存储在内存中的什么位置
当我在 ffmpeg(或任何其他程序)中使用这样的命令时: ffmpeg -i input.mp4 image%d.jpg 所有图像的组合文件大小总是比视频本身大。我尝试减少每秒帧数、降低压缩设置、模
我是 clojurescript 的新手。 高级编译后出现“77 KB”的javascript文件是否正常? 我有一个 clojurescript 文件: 我正在使用 leinigen: lein c
我想要一个 QPixmap尺寸为 50 x 50。 我试过 : QPixmap watermark(QSize(50,50)); watermark.load(":/icoMenu/preparati
我正在尝试从一篇研究论文中重新创建一个 cnn,但我对深度学习还是个新手。 我得到了一个大小为 32x32x7 的 3d 补丁。我首先想执行一个大小为 3x3 的卷积,具有 32 个特征和步幅为 2。
我一直在尝试调整 View Controller 内的 View 大小,但到目前为止没有运气。基本上,我的 View 最底部有一个按钮,当方向从纵向更改为横向时,该按钮不再可见,因为它现在太靠下了。
如何使用此功能检查图像的尺寸?我只是想在上传之前检查一下... $("#LINK_UPLOAD_PHOTO").submit(function () { var form = $(this);
我用 C++ 完成了这个,因为你可以通过引用传递参数。我无法弄清楚如何在 JavaScript 中执行此操作。我的代码需要更改什么?我的输出是1 this.sizeOfBst = function()
我是一名优秀的程序员,十分优秀!