我在個人項目中首次使用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中),指定傳遞給控制器構造函數的策略實現。然後您的控制器可以調用策略並將圖表放在適當的選項卡中。 –