如何在JavaFX上调整画布大小以适合

时间:2015-04-27 21:41:45

标签: java canvas javafx javafx-2 javafx-8

我是JavaFX的新手,我在调整画布大小时遇到​​了问题。 我试图让画布大小完全符合我放入其中的内容。 输出应该是唯一的片段5/7,但是我在我绘制的数字旁边得到了很多空白区域。 我尝试使用setWidth调整画布大小,甚至从开始时将画布设置为小尺寸,但似乎没有任何帮助。

这是我的代码:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.HBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;

public class Example extends Application {

    Font fontLarge = Font.font("Droid Sans", FontWeight.BOLD, 15);

    @Override
    public void start(Stage stage) {

        HBox root = new HBox();
        Scene scene = new Scene(root);

        root.getChildren().add(getCanvasOfRationalNumber("5", "7"));
        scene.setRoot(root);
        stage.setScene(scene);
        stage.show();
    }

    public Canvas getCanvasOfRationalNumber(String num, String denom) {
        final Canvas rnCanvas = new Canvas(300, 55);
        GraphicsContext gc = rnCanvas.getGraphicsContext2D();
        gc.setFont(fontLarge);

        gc.fillText(num, 0, 15);
        gc.fillText("___", 0, 20);
        gc.fillText(denom, 0, 40);

        rnCanvas.setWidth(15);
        return rnCanvas;
    }

    public static void main(String[] args) {
        launch(args);
    }

}

1 个答案:

答案 0 :(得分:1)

编辑:我之前的回答是错误的,这是新的回答。

我们需要澄清你真正想要的东西。如果我现在正确理解你想要的是窗口大小本身并不比画布大小大。

正如珠宝在评论中指出的那样,你可以改变画布的宽度和高度。实际上,您已经在代码中执行此操作。

我建议你为Canvas和Scene选择不同的颜色。如果你用e做。 G:

public class Example extends Application {

    Font fontLarge = Font.font("Droid Sans", FontWeight.BOLD, 15);

    @Override
    public void start(Stage stage) {

        HBox root = new HBox();
        Scene scene = new Scene(root, Color.YELLOW);

        root.getChildren().add(getCanvasOfRationalNumber("5", "7"));
        scene.setRoot(root);
        stage.setScene(scene);
        stage.show();
    }

    public Canvas getCanvasOfRationalNumber(String num, String denom) {
        final Canvas rnCanvas = new Canvas(300, 55);
        GraphicsContext gc = rnCanvas.getGraphicsContext2D();
        gc.setFont(fontLarge);

        gc.setFill(Color.LIGHTBLUE);
        gc.fillRect(0, 0, 300, 55);

        gc.setFill(Color.BLUE);

        gc.fillText(num, 0, 15);
        gc.fillText("___", 0, 20);
        gc.fillText(denom, 0, 40);

        rnCanvas.setWidth(15);
        return rnCanvas;
    }

    public static void main(String[] args) {
        launch(args);
    }

}

你会得到这个

enter image description here

您清楚地看到Canvas已经调整大小。您面临的问题是窗口不能更小。那是场景中的白色(或黄色)空间,而不是画布。您可以尝试将宽度设置为1,将高度设置为1,但是您仍然可以将此设置为:

enter image description here

我的猜测是,由于最小/最大/关闭按钮,窗口大小不会变小。您可以使用initStyle方法更改样式以删除按钮。

这完全取决于您的要求。

旧的(错误的)答案:

您无法修改Canvas的宽度/高度。

  

Canvas是一个可以使用一组图形绘制的图像   由GraphicsContext提供的命令。

     

Canvas节点的构造宽度和高度指定   画布绘制命令所在的图像大小   渲染。所有绘图操作都被剪切到其边界   图像。

您的解决方案是将画布区域复制到另一个尺寸的新画布,或者根本不使用画布,而是使用e。 G。一个Text节点。但这一切都取决于你的要求。