我正在尝试以业务逻辑和 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;
}
}
关于java - 更改 javafx 对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33196729/