- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个JavaFX程序,该程序使用TextField
框从用户处获取尺寸并创建两个矩形,绘制它们,并在它们相交时发送消息。我在绘制矩形时遇到问题,我不知道为什么会发生这种情况。我也不确定在查看这些值时如何判断它们是否相交。您可以提供的任何帮助将不胜感激,我已在下面发布了我的代码。
我的代码:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.layout.*;
import javafx.scene.layout.StackPane;
import javafx.geometry.Insets;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.control.*;
import javafx.scene.shape.Rectangle;
public class Rectangles extends Application
{
Canvas canvas;
Label intersectLabel;
TextField x1Text;
TextField x2Text;
TextField y1Text;
TextField y2Text;
TextField width1Text;
TextField width2Text;
TextField height1Text;
TextField height2Text;
@Override
public void start(Stage stage) throws Exception
{
// Create a VBox to stack panes vertically
VBox panesStack = new VBox(20);
// Create padding of 10 pixels
Insets padding = new Insets(10);
// Create labels and text fields for rectangle 1 info
Label x1Label = new Label("X:");
// Create labels and field for r1.
TextField x1Text = new TextField();
Label y1Label = new Label("Y:");
TextField y1Text = new TextField();
Label width1Label = new Label("Width:");
TextField width1Text = new TextField();
Label height1Label = new Label("Height:");
TextField height1Text = new TextField();
// Create grid pane for rectangle 1 info, set spacing
GridPane grid1 = new GridPane();
grid1.setPadding(padding);
grid1.setHgap(10);
grid1.setVgap(5);
// Add rectangle 1 labels and text fields to grid pane
// First add the top label to span two columns
grid1.add(new Label("Enter Rectangle 1 info:"),0,0,2,1);
grid1.add(x1Label,0,1);
// Add rest of labels and text fields to grid pane
grid1.add(x1Text,1,1);
grid1.add(y1Label,0,2);
grid1.add(y1Text,1,2);
grid1.add(width1Label,0,3);
grid1.add(width1Text,1,3);
grid1.add(height1Label,0,4);
grid1.add(height1Text,1,4);
// Create labels and text fields for rectangle 2 info
Label x2Label = new Label("X:");
TextField x2Text = new TextField();
Label y2Label = new Label("Y:");
TextField y2Text = new TextField();
Label width2Label = new Label("Width:");
TextField width2Text = new TextField();
Label height2Label = new Label("Height:");
TextField height2Text = new TextField();
// Create grid pane for rectangle 2 info, set spacing
GridPane grid2 = new GridPane();
grid2.setPadding(padding);
grid2.setHgap(10);
grid2.setVgap(5);
// Add rectangle 2 labels and text fields to grid pane
// First add the top label to span two columns
grid2.add(new Label("Enter Rectangle 2 info:"),0,0,2,1);
// Add field and labels
grid2.add(x2Label,0,1);
grid2.add(x2Text,1,1);
grid2.add(y2Label,0,2);
grid2.add(y2Text,1,2);
grid2.add(width2Label,0,3);
grid2.add(width2Text,1,3);
grid2.add(height2Label,0,4);
grid2.add(height2Text,1,4);
// Add the two rectangle info grid panes to an HBox
// (so they appear horizontally)
// then add the HBox to the overarching vertical box (panesStack)
HBox rectGrids = new HBox(30);
rectGrids.getChildren().add(grid1);
rectGrids.getChildren().add(grid2);
panesStack.getChildren().add(rectGrids);
// Create update button
// Add event handler to button
// Add it to overarching vertical box (panesStack)
Button update = new Button("Update");
update.setOnAction(this::updateGUI);
panesStack.getChildren().add(new StackPane(update));
// Create a canvas for drawing the rectangles
canvas = new Canvas(600, 500);
// Get the canvas' graphics context to draw
GraphicsContext graphicsContext = canvas.getGraphicsContext2D();
// Initially make the canvas blank white
graphicsContext.setFill(Color.WHITE);
graphicsContext.fillRect(0,0, canvas.getWidth(), canvas.getHeight());
// Add the canvas to the overarching vertical box (panesStack)
panesStack.getChildren().add(canvas);
// Create a label for the intersection message
intersectLabel = new Label("waiting for rectangle info");
intersectLabel.setPadding(new Insets(0,0,20,0));
panesStack.getChildren().add(new StackPane(intersectLabel));
// Create a scene containing the overarching vertical box
Scene scene = new Scene(panesStack);
stage.setTitle("Rectangles Lab"); // Set window's title
stage.setScene(scene); // Set window's scene
stage.show();
}
public void updateGUI(ActionEvent e) {
Rectangle r1 = new Rectangle();
r1.setHeight(Double.valueOf(height1Text.getText()));
r1.setWidth(Double.valueOf(width1Text.getText()));
r1.setX(Double.valueOf(x1Text.getText()));
r1.setY(Double.valueOf(y1Text.getText()));
Rectangle r2 = new Rectangle();
r2.setHeight(Double.valueOf(height2Text.getText()));
r2.setWidth(Double.valueOf(width2Text.getText()));
r2.setX(Double.valueOf(x2Text.getText()));
r2.setY(Double.valueOf(y2Text.getText()));
GraphicsContext graphics = canvas.getGraphicsContext2D();
graphics.fillRect(r1.getX(), r1.getY(), r1.getWidth(), r1.getHeight());
graphics.setStroke(Color.BLUE);
graphics.fillRect(r2.getX(), r2.getY(), r2.getWidth(), r2.getHeight());
graphics.setStroke(Color.RED);
}
}
最佳答案
现在看看里面 updateGUI
。您正在调用graphics.fillRect
,但设置 graphics.setStroke
。描边和填充是不同的属性,如果要填充请调用setFill
与所需的Paint
,如果你想抚摸,请调用setStroke
。另外,您需要在进行绘制操作之前而不是之后设置描边/填充。
至于检查交叉点,请查看 Shape#intersect
或在 Node.intersects
。第一个返回作为相交结果的形状,并且适用于所有形状。第二个返回一个 boolean 值,具体取决于节点的矩形边界,因此它仅对于矩形是准确的。
此外,如果需要,请记住在每次绘制之前清除 Canvas 。
关于JavaFX 当按钮按下时在文本字段中绘制具有尺寸的矩形并查找它们是否相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56051514/
表架构 DROP TABLE bla; CREATE TABLE bla (id INTEGER, city INTEGER, year_ INTEGER, month_ INTEGER, val I
我需要拆分字符串/或从具有以下结构的字符串中获取更容易的子字符串。 字符串将来自 window.location.pathname 或 window.location.href,看起来像 text/n
每当将对象添加到数组中时,我都会尝试更新 TextView ,并在 TextView 中显示该文本,如下所示: "object 1" "object 2" 问题是,每次将新对象添加到数组时,它都会覆盖
我目前正在寻找使用 Java 读取网站可见文本并将其存储为纯文本字符串的方法。 换句话说,我想转换成这样: Hello stupid World进入“ Hello World ” 或者类似的东西 Un
我正在尝试以文本和 HTML 格式发送电子邮件,但无法正确发送正确的 header 。特别是,我想设置 Content-Type header ,但我找不到如何为 html 和文本部分单独设置它。 这
我尝试了上面的代码,但我无法绑定(bind)文本,我怎样才能将资源内部文本 bloc
我刚刚完成了 Space Shooter 教程,由于没有 GUIText 对象,所以我创建了 UI.Text 对象并进行了相应的编码。它在统一播放器中有效,但在构建 Web 应用程序后无效。我花了一段
我有这个代码: - (IBAction)setButtonPressed:(id)sender { NSUserDefaults *sharedDefaults = [[NSUserDefau
抱歉标题含糊不清,但我想不出我想在标题中做什么。无论如何,对于图像上的文本,我使用了 JLabel 文本并将其添加到图标中。 JLabel icon = new JLabel(new Imag
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我在将 Twitter 嵌入到我从 HTML 5 转换的 wordpress 运行网站时遇到问题。 我遇到的问题是推文不是我的自定义字体... 这是我无法使用任何 css 定位的 HTML 代码,我正
我正在尝试找到解决由于使用以下形式的代码而导致的冗余字符串连接问题的最佳方法: logger.debug("Entering loop, arg is: " + arg) // @1 在大多数情况下,
我写了这个测试 @Test public void removeRequestTextFromRouteError() throws Exception { String input = "F
我目前正在创建一个正则表达式来拆分所有匹配以下格式的字符串:&[文本],并且需要获取文本。字符串可能类似于:something &[text] &[text] everything &[text] 等
有没有办法将标题文本从一个词变形为另一个词,同时保留两个词中使用的字母?我看过的许多 css 文本动画大多是视觉的,很少有旋转整个单词的。 我想要做的是从一个词过渡,例如“BEACH”到“CHANGE
总结matplotlib绘图如何设置坐标轴刻度大小和刻度。 上代码: ?
我在容器 (1) 中创建了容器 (2)。你能帮忙如何向容器(1)添加文本吗?下面是我的代码 return Scaffold( body: Padding( padding: c
我似乎找不到任何人或任何人这样做过。我试图限制我们使用的图像数量,并想创建一个带有渐变作为其“颜色”的文本,并在其周围设置渐变轮廓/描边 到目前为止,我还没有看到任何将两者结合在一起的东西。 我可以自
我正在为视频游戏暗黑破坏神 2 使用 discord.py 构建一个不和谐机器人。其中一项功能要求机器人从暗黑破坏神 2 屏幕截图中提取项目的名称和属性。我目前正在为此使用 pytesseract,但
我很难弄清楚如何旋转 strip.text theme 中的属性来自 ggplot2 .我使用的是 R 版本 3.4.2 和 ggplot2 版本 2.2.1。 以下是 MWE 的数据。 > dput
我是一名优秀的程序员,十分优秀!