java - 更改 javafx 对象属性

标签 java oop javafx

我正在尝试以业务逻辑和 View 分离的方式开发一个javafx项目。坦白说,我不知道我的理解是否正确。

我的想法是创建一个类 View 。简化后如下所示:

public class View extends Application {

    private Pane screen = new Pane();

    private Rectangle rect;

    private Scene scene = new Scene(screen, 500, 500);


    public View(){
        rect = new Rectangle(10, 10, 100, 100);
        rect.setFill(Color.WHITE);
        rect.setStroke(Color.BLACK);
        screen.getChildren().add(rect);
    }

    @Override
    public void start(Stage primaryStage) {

        primaryStage.setTitle("Rectangles");
        primaryStage.setScene(scene);
        primaryStage.show();

    }

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

    public void setColor() {
        rect.setFill(Color.BROWN);
    }

}

可以在另一个类的主要方法(包括业务逻辑)中以这种方式创建和使用该类的对象:

View foo = new View();
foo.main(null);

不幸的是,之后我无法更改其属性。因此,该声明没有任何作用。

foo.setColor();

就像我说的,也许这是一个错误的方法。我对 javafx 不太熟悉,所以请纵容我。

最佳答案

您需要从 View 中删除 main 方法。在您的逻辑类中,您必须保存您设置的根 Pane 。然后您可以将 View 放入/更改 Pane 中。那么你的 View 就不能再扩展应用程序了!让它扩展一些 Pane 。

private final BorderPane rootPane = new BorderPane(); // Class field

// in your start method
final Scene scene = new Scene(rootPane);
primaryStage.setScene(scene);

//Change View like this:
View v = new BView();
rootPane.setCenter(v.getRec());

// later you can set your color
v.setColor()


// Your View class:
public class View{
    private Rectangle rect;

    public View(){
      rect = new Rectangle(10, 10, 100, 100); 
      rect.setFill(Color.WHITE);            
      rect.setStroke(Color.BLACK);
    }

    public Rectangle getRec(){
        return this.rect;
    }
}

另请查看this Documentatino here

关于java - 更改 javafx 对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33196729/

相关文章:

JavaFX TableView : Rapid change in items list not reflected

java - 无法将 javafx.scene.control.TextField 设置为字段 'user'

JavaFx:使用webengine在服务器程序中获取javascript渲染的dom

java - 检索到的数据未显示在 TextView 中

java - spring data jpa 是否做缓存

java - PyYaml 到 SnakeYaml --- AWT-EventQueue- 0"Can' t 为标签 :yaml. org,2002:java/object 构造一个 java 对象:

javascript - JS - 更改对象所有实例的值

c# - 接口(interface)和只有一个抽象方法的抽象类有什么区别?

java - 如何表示成员字段默认为@Nonnull?

oop - Scala扩展参数化抽象类