当前位置: 首页 > 知识库问答 >
问题:

画布和锚具只会随着窗口的大小而变大

弘涛
2023-03-14

我对JavaFX有问题。当我调整窗口大小时,它会自动调整锚具的大小以适应。此外,帆布的宽度和高度属性也被绑定到锚烷上。因此,如果通过重新调整窗口本身,锚烷变大,画布也会变大。

但是当我把窗户变小,宽度和高度保持不变时,问题就来了。我真的不明白那里的行为。

因此,如果在使窗户更大的宽度和高度是100。然后在把窗口缩小后,它仍然是100。。。除息的

这是我的画布控制器。

package de.schlo.spoteditor;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;

import java.net.URISyntaxException;

public class ControllerCanvas {
    @FXML
    Canvas canvas;
    @FXML
    Button btnPaint;
    @FXML
    Button btnClear;
    @FXML
    AnchorPane apCanvas;
    @FXML
    AnchorPane apGC;

    GraphicsContext gc;
    String imageURL = this.getClass().getClassLoader().getResource("000.jpg").toString();
    Image image = new Image(imageURL);

    @FXML
    public void initialize() throws URISyntaxException {
        gc = canvas.getGraphicsContext2D();
        gc.drawImage(image, 0, 0,canvas.getWidth(), canvas.getHeight());
        canvas.widthProperty().bind(apCanvas.widthProperty());
        canvas.heightProperty().bind(apCanvas.heightProperty());
    }

    @FXML
    private void paintAction(ActionEvent event) {
        gc.setFill(Color.DARKBLUE);
        gc.fillOval(65, 30, 30, 30);
    }

    @FXML
    private void clearAction(ActionEvent event) {
        gc.drawImage(image, 0, 0,canvas.getWidth(), canvas.getHeight());
        System.out.println(apCanvas.widthProperty().get());
        System.out.println(apCanvas.heightProperty().get());

        System.out.println(canvas.widthProperty().get());
        System.out.println(canvas.heightProperty().get());
        System.out.println();
    }
}

以及我对应的FXML:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.canvas.Canvas?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>

<AnchorPane fx:id="apGC" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.schlo.spoteditor.ControllerCanvas">
   <children>
      <VBox AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <Button fx:id="btnPaint" mnemonicParsing="false" onAction="#paintAction" text="Paint" />
            <Button fx:id="btnClear" mnemonicParsing="false" onAction="#clearAction" text="Clean" />
            <AnchorPane fx:id="apCanvas" VBox.vgrow="ALWAYS">
               <children>
                  <Canvas fx:id="canvas" height="510.0" width="510.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
               </children>
            </AnchorPane>
         </children>
      </VBox>
   </children>
</AnchorPane>

共有1个答案

艾意蕴
2023-03-14

在尝试了一下之后,我找到了一个简单的解决方案。

画布现在被包裹在一个ScrollPane中,该ScrollPane被包裹在一个AnchorePane中。

现在它工作得很好:)

 类似资料:
  • 本文向大家介绍MFC控件大小随窗体大小而改变,包括了MFC控件大小随窗体大小而改变的使用技巧和注意事项,需要的朋友参考一下 一。大小和位置都改变 1.首先为窗体类添加CRect m_rect,该成员变量用来记录窗体的当前大小。 2.在类向导里面(Ctrl+W),为窗体添加消息WM_SIZE的响应函数OnSize(); 注意if(nType==1) return;这一句必须添加,否则最小化恢复的时候

  • 我需要相对于窗口大小。我有什么办法可以做到吗?

  • 问题内容: 如何自动缩放HTML5 元素以适合页面? 例如,我可以通过将和属性设置为100%来缩放,但是不会缩放吗? 问题答案: 我相信我已经找到了一个优雅的解决方案: JavaScript CSS 到目前为止,对我没有太大的负面性能影响。

  • 所以我一直在使用tkinter中的画布小部件来创建一个充满标签的框架,它有一个滚动条。除了框架只扩展到其中放置的标签的大小之外,一切都很好——我希望框架扩展到父画布的大小。 如果我对画布中的框架使用pack(expand=True)(我在下面的代码中已经注释掉了它),那么很容易做到这一点,但是滚动条不起作用。 以下是适当的代码位: 我还提供了一个带有彩色边框的图像,这样你可以看到我的意思。粉红色区

  • 我正试着做这样的事…有人能给我指个正确的方向吗? 现在,我正在使用缩放动画和淡出动画。它看起来是这样的.. 我如何添加背景色到这个…另外,请记住,我希望这个工作从ICS/JellyBean shape_circle_yellow.xml Java代码:

  • 我使用Infinispan缓存来存储值。代码每10分钟写入一次缓存,缓存大小约为400mb。它的生存时间约为2小时,最大条目数为1600万条,尽管目前在我的测试中,条目数没有超过200万条左右(我可以通过检查jconsole中的MBean/指标来了解这一点)。 当我启动jboss时,java堆大小是1.5Gb到2Gb。为jboss分配的最大内存的-Xmx设置是4Gb。 当我禁用Infinispan