javaFX - 如何创建可调整大小的矩形?

时间:2016-07-03 23:01:00

标签: java javafx-2 javafx-8

我想制作一个GUI桌面应用程序,它应该在不同的系统上运行。在第一步中,我想创建一个在1920 * 1080和800 * 600等不同屏幕中显示的矩形。第一个系统中的这个矩形大小应该是900 * 500,而在第二个系统中它的比例应该是500 * 350(Scales只是示例!)我如何定义一个以这种方式工作的矩形?

2 个答案:

答案 0 :(得分:1)

JavaFX包中的float tmpX = x * c - y * s; y = y * c + x * s; x = tmpX; 类本身是一个可调整大小的矩形,因为您也可以更改宽度/高度和位置。你只需要弄清楚当前的分辨率并改变它的大小。

请参阅Java Doc

答案 1 :(得分:1)

你问的是Responsive Design。下面是你想要做的一个例子。虽然不是最好的解决方案,但我的意思是它可以修改以获得更好的性能(我还添加了一些代码来移动窗口如果是StageStyle.UNDECORATED拖动窗口以查看此内容:

enter image description here

 import javafx.application.Application;
import javafx.scene.Cursor;
import javafx.scene.Scene;
import javafx.scene.input.MouseButton;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class FX extends Application {

    int screenWidth = (int) Screen.getPrimary().getBounds().getWidth();
    int screenHeight = (int) Screen.getPrimary().getBounds().getHeight();

    Stage stage;
    Scene scene;

    int initialX;
    int initialY;

    @Override
    public void start(Stage s) throws Exception {

        // root
        BorderPane root = new BorderPane();
        root.setStyle("-fx-background-color:rgb(186,153,122,0.7); -fx-background-radius:30;");

        // Responsive Design
        int sceneWidth = 0;
        int sceneHeight = 0;
        if (screenWidth <= 800 && screenHeight <= 600) {
            sceneWidth = 600;
            sceneHeight = 350;
        } else if (screenWidth <= 1280 && screenHeight <= 768) {
            sceneWidth = 800;
            sceneHeight = 450;
        } else if (screenWidth <= 1920 && screenHeight <= 1080) {
            sceneWidth = 1000;
            sceneHeight = 650;
        }

        // Scene
        stage = new Stage();
        stage.initStyle(StageStyle.TRANSPARENT);
        scene = new Scene(root, sceneWidth, sceneHeight, Color.TRANSPARENT);

        // Moving
        scene.setOnMousePressed(m -> {
            if (m.getButton() == MouseButton.PRIMARY) {
                scene.setCursor(Cursor.MOVE);
                initialX = (int) (stage.getX() - m.getScreenX());
                initialY = (int) (stage.getY() - m.getScreenY());
            }
        });

        scene.setOnMouseDragged(m -> {
            if (m.getButton() == MouseButton.PRIMARY) {
                stage.setX(m.getScreenX() + initialX);
                stage.setY(m.getScreenY() + initialY);
            }
        });

        scene.setOnMouseReleased(m -> {
            scene.setCursor(Cursor.DEFAULT);
        });

        stage.setScene(scene);
        stage.show();
    }

    /**
     * Main Method
     * 
     * @param args
     */
    public static void main(String[] args) {
        launch(args);
    }

}

你是happy吗?:)