在使用FlexGanttFX时,我不得不处理很多JavaFX Canvas节点。 我正在使用它在时间轴上呈现活动。 甘特图中的每一行都是一个Canvas节点。 用户可以选择单独调整每行的大小。 因此,我不得不找出调整画布大小的最佳方法,这种现成的方法无法调整大小。 下面的清单显示了如何实现此目的。

所需的主要步骤是:

  • 创建Canvas的子类。
  • 重写isResizable()方法并返回true。
  • 重写prefWidth()prefHeight()方法。 返回Canvas.getWidth()Canvas.getHeight()的值。
  • 将侦听器添加到“ 画布”的width和height属性中,以便在画布大小更改时触发重绘。
  • 将“画布”的width和height属性绑定到父窗格的width和height属性。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;/*** Tip 1: A canvas resizing itself to the size of*        the parent pane.*/
public class Tip1ResizableCanvas extends Application {class ResizableCanvas extends Canvas {public ResizableCanvas() {// Redraw canvas when size changes.widthProperty().addListener(evt -> draw());heightProperty().addListener(evt -> draw());}private void draw() {double width = getWidth();double height = getHeight();GraphicsContext gc = getGraphicsContext2D();gc.clearRect(0, 0, width, height);gc.setStroke(Color.RED);gc.strokeLine(0, 0, width, height);gc.strokeLine(0, height, width, 0);}@Overridepublic boolean isResizable() {return true;}@Overridepublic double prefWidth(double height) {return getWidth();}@Overridepublic double prefHeight(double width) {return getHeight();}}@Overridepublic void start(Stage stage) throws Exception {ResizableCanvas canvas = new ResizableCanvas();StackPane stackPane = new StackPane();stackPane.getChildren().add(canvas);// Bind canvas size to stack pane size.canvas.widthProperty().bind(stackPane.widthProperty());canvas.heightProperty().bind(stackPane.heightProperty());stage.setScene(new Scene(stackPane));stage.setTitle("Tip 1: Resizable Canvas");stage.show();}public static void main(String[] args) {launch(args);}
}

运行时,您应该看到以下内容:

翻译自: https://www.javacodegeeks.com/2014/04/javafx-tip-1-resizable-canvas.html

JavaFX技巧1:可调整大小的Canvas相关推荐

  1. javafx canvas_JavaFX技巧1:可调整大小的Canvas

    javafx canvas 在使用FlexGanttFX时,我不得不处理很多JavaFX Canvas节点. 我正在使用它在时间轴上呈现活动. 甘特图中的每一行都是一个Canvas节点. 用户可以选择 ...

  2. JavaFX技巧来节省内存! 属性和可观察物的阴影场

    在 JavaFX的世界中, Properties API允许UI开发人员将值绑定到UI控件. 这种功能非常容易,但是当对象模型经常使用属性时,应用程序可能会很快耗尽内存. 我通常会编写两个单独的对象, ...

  3. JavaFX技巧2:使用Canvas API进行清晰绘图

    当我最初开始使用Canvas API时,我注意到渲染代码的结果有些模糊,甚至更糟,不一致. 有些线条模糊,有些线条清晰. 来自Swing,我花了一些时间才意识到这是由JavaFX的坐标系引起的,该坐标 ...

  4. JavaFX技巧22:“自动调整大小(树)”表列

    JavaFX "缺少功能调查"中提到的"缺少功能"的第一件事就是能够自动调整表/树表中的列大小. 没错,没有公共API是正确的,但是当您密切关注时,您会注意到J ...

  5. JavaFX技巧20:有很多需要展示的地方吗? 使用画布!

    JavaFX应用程序似乎有两种:第一种使用带有节点和CSS样式的场景图,第二种使用单个画布. 但是,将这两种方法混合使用是完全合法的. 尤其是当您的应用程序必须显示大量详细信息时,您很容易最终创建成千 ...

  6. JavaFX技巧17:带有AnchorPane的动画工作台布局

    最近,我不得不为应用程序实现一个布局,其中可以根据用户是否登录来隐藏或通过滑入/滑出动画显示或显示菜单区域和状态区域. 以下视频显示了实际的布局: 在过去,我可能会使用自定义控件和自定义布局代码来实现 ...

  7. JavaFX技巧9:请勿混用Swing / JavaFX

    JavaFX团队非常努力地说服我们,因为可以将Swing内容嵌入JavaFX UI中,因此可以很容易地从Swing迁移到JavaFX. 我必须承认,我从来没有亲自尝试过,但是根据我从客户那里得到的反馈 ...

  8. JavaFX技巧32:需要图标吗? 使用Ikonli!

    动机 自2013年以来,我一直在编写JavaFX应用程序和库的代码,它们的共同点是,我需要找到可以用于它们的良好图标/图形. 作为前Swing开发人员,我首先使用图像文件,GIF或PNG. 通常,我会 ...

  9. JavaFX技巧31:遮罩/剪切/ Alpha通道

    选择条 最近,我不得不实现一个自定义控件,该控件使用户可以从项目列表中选择一个项目. 此" SelectionStrip"控件必须水平放置项目,并且在项目过多的情况下,允许用户左右 ...

最新文章

  1. 如何安装OpenCV?如何安装cv2?如何更新numpy?
  2. 数据结构 -- 队列
  3. 线性代数 第四章 向量组的线性相关性
  4. MySQL常见的主从复制架构_如何搭建经典的MySQL 主从复制架构
  5. Java三层结构的概念_Java中的mvc和三层结构究竟是什么关系
  6. Windows USB驱动开发点滴积累备忘录
  7. Centos 7安装yum时发生错误https:nginx.orgpackagesmainlinecentos7%24baseearchrepodatarepomd.xml: Errno 14 HTT
  8. ElasticSearch 2 (34) - 信息聚合系列之多值排序
  9. 黑鸭宣布开源项目-年度新秀
  10. 【恶搞Python】Python实现QQ连续发送信息的代码,咋就说可还刑
  11. Struts2 中继承ActionSupport类
  12. 如何将APK上传到谷歌应用市场
  13. 【常用办公软件有那些】万彩办公大师教程丨屏幕放大镜的使用
  14. 使用腾讯云部署war包
  15. 医院子母钟时钟系统方案
  16. 《类》《this指针》《构造函数》《析构函数》《拷贝构造函数》《赋值运算符重载》
  17. 红米Android11更新时间,这些是不支持ANDROID 11更新的小米和红米手机
  18. 2021-Swin Transformer Attention机制的详细推导
  19. bzoj3663/4660CrazyRabbit bzoj4206最大团
  20. 关于考试系统的ajax提交单个答案的压力测试

热门文章

  1. 字段缺失_区分Protobuf 3中缺失值和默认值
  2. springboot创建项目 编写dao serviece 和controller 持久层用mybatis
  3. java.util.concurrent.locks.Lock文档说明
  4. java 常规类的可见性_Java 12常规可用性
  5. 从Speedment 3.0.17或更高版本的事务轻松返回值
  6. java ee jms_在Java EE 7中自动配置JMS资源
  7. 使用JDK的密码流的加密怪癖(以及如何做)
  8. 使用网真和WAD热部署Kubernetes
  9. java8 streams_使用Java 8 Streams进行编程对算法性能的影响
  10. java 调试 工具_Java调试器–权威的工具列表