2017-05-07 29 views
0

我正在編寫一個程序,根據每日輸入來跟蹤用戶的心情,將每個條目保存爲一個文本文件(包括輸入日期和時間以及1-5的心情等級)並生成一個JavaFX線條圖,其中輸入日期爲x軸,情緒爲y軸,以顯示用戶的情緒如何隨時間波動。將節點懸停在LineChart JavaFX中的TextArea?

我剛剛成功添加了將鼠標懸停在LineChart上的任何節點上以在TextArea中顯示相關條目的功能。我似乎無法修復的唯一問題是:如何將TextArea居中在折線圖的中間?

因爲發生的事情是textarea的是出現在相同的位置,用戶正在徘徊的線型圖節點,並造成與附近的邊緣節點主要可讀性的問題(如圖所示這裏:TextArea overlaps with linechart borders

下面是在懸停時創建TextArea的代碼。如果您需要更多信息/代碼片段,請告訴我,我會很樂意提供。任何幫助將不勝感激!

class HoveredThresholdNode extends StackPane { 
    HoveredThresholdNode(String date, int mood, int index) { 
     setPrefSize(13, 13); 

     TextArea entry = createDataThresholdLabel(date, mood, index); 

     setOnMouseEntered(new EventHandler<MouseEvent>() { 
     @Override public void handle(MouseEvent mouseEvent) { 

      /** 
      *Right here is where I need to change the location of 
      *the TextArea on the linechart, but I don't know how 
      */ 

      getChildren().setAll(entry); 
      toFront(); 
     } 
     }); 
     setOnMouseExited(new EventHandler<MouseEvent>() { 
     @Override public void handle(MouseEvent mouseEvent) { 
      getChildren().clear(); 
      setCursor(Cursor.DEFAULT); 
     } 
     }); 
    } 

    private TextArea createDataThresholdLabel(String date, int mood, int index) { 
     //Creates&returns TextArea, left out code as it's irrelevant 
     //Don't worry about index parameter, it's just used for retrieving entry 
    } 
} 
+0

您是否嘗試過把'大號在StackPane中添加一個'TextField',然後添加一個'VBox' /'HBox'中的'TextField'來爲你定位?我使用這種技術在我的JavaFx應用程序中創建彈出窗口。所有的居中都由JavaFx處理,而不是在這種情況下。 (如果你需要一個例子,我可以嘗試鞭打一個) – Chris

+0

嗯,有趣!線圖目前位於網格窗格中,但我沒有將文本字段包裹在任何佈局中。我現在就試試吧! –

+0

包裝文本字段的工作? – Chris

回答

0

嘗試將LineChart放入StackPane中,然後添加一個包含在VBox/HBox中的TextField,以便爲您居中。我使用這種技術在我的JavaFx應用程序中創建彈出窗口。所有的居中都由JavaFx處理,而不是在這種情況下。該結構是這樣的:

  • 堆棧窗格
    • 線圖
    • 的VBox/HBox中
      • 文本字段