我在个人项目中首次使用JavaFX进行游戏。从外部FXML控制器获取对Tab的引用
我希望能够更新Tab中的内容(添加PieChart),但是从FXML控制器外部,任何人都可以告诉我这是否可能?我如何获得对相关选项卡的引用,并且是否有方法指定我添加的项目的位置?
UPDATE:增加了一些示例代码。
希望这给的什么,我试图做一个清晰的思路:
接口:
interface ChartStrategy {
public void DisplayChart(Info info)
}
两个实现:
public class BarChartStrategy extends ChartStrategy {
public void DisplayChart(Info info)
{
// Create bar charts on specific tabs in the UI
}
}
public class PieChartStrategy extends ChartStrategy {
public void DisplayChart(Info info)
{
// Create pie charts on specific tabs in the UI
}
}
上下文:
public class ChartContext {
private ChartStrategy strategy;
public void setChartStrategy(ChartStrategy strategy) {
this.strategy = strategy;
}
public void drawGraphs(Info info) {
strategy.DisplayChart(info);
}
}
在我的控制ler,我在用户选择的文件中读取数据以生成图表,解析,例如。
@FXML
private void handleButtonAction(ActionEvent event) {
// Load the file and parse the data
...
ChartContext charts = new ChartContext();
charts.setChartStrategy(new PieChartStrategy());
}
所以我最初的想法是,我可以借鉴在实施中DisplayChart功能的图表,但似乎不是一个好主意 - 任何人都可以给我一些建议在这里得到这个的最佳方式工作?
请问为什么?这正是控制器应该做的事情。你可以在控制器中定义一个返回特定选项卡的方法,并从你需要的地方调用它,但我不建议在控制器之外暴露UI组件。 –
我正尝试使用策略模式来处理在UI中显示不同的图表类型,方法是直接从策略实施中在UI中创建图表。馊主意?参加一个关于设计模式的课程,并试图让我的头脑围绕这一点。 –
不是一个坏主意,不,但是您不需要公开控制器中的UI组件就可以做到这一点。在控制器级别定义策略:即您的控制器具有对类型为策略(接口)的字段的引用。在代码中创建控制器(而不是在FXML中),指定传递给控制器构造函数的策略实现。然后您的控制器可以调用策略并将图表放在适当的选项卡中。 –