2012-11-16 63 views

回答

0

我剛碰到同樣的問題。

我想要一個'繪圖面板',我可以放置可拖動的輔助線。 你可以通過'setOnMousePressed'和'setOnMouseDragged'附加一個MouseHandler來獲得這樣的行爲。

但是,最大的問題是,線條尺寸太小,你必須很幸運,用鼠標點擊它。

這就是爲什麼我反其道而行之。 我附加一個鼠標處理程序到繪圖面板和每一個鼠標點擊我檢查,如果鼠標cusor是在任何輔助線附近。 這給了我一個添加一點寬容的機會,所以可以點擊並拖動這些線條。

我不能說,如果是最有效的方式,將很高興,如果有人想出了一個更好的主意。

編輯: 同時,我寫了一個小測試,結果發現,我的第一個想法是不是很好。

我的第二個想法是包裹線在一個窗格和居中的y軸座標(對於垂直線),該窗格內。 在該窗格上,我設置了鼠標處理程序。而且,由於我使窗格的首選高度爲5像素,因此現在有足夠的容差讓鼠標光標捕捉該線。

如果有人對這個想法感興趣,我可以發佈一些示例代碼。

問候,-chris-

0

使用JavaFX時,這是經常發生的問題。目前,我用厚厚的視覺效果覆蓋了所有薄的視覺效果,並在厚厚的視覺效果上註冊了事件聽衆。

例如,具有由多條線段的連接:

// construct invisible fat lines for selection 
selectionLines.getChildren().clear(); 
for (Node child : connection.getChildren()) { 
    Line line = (Line) child; 
    Line selLine = new Line(line.getStartX(), line.getStartY(), line.getEndX(), line.getEndY()); 
    selLine.setLayoutX(line.getLayoutX()); 
    selLine.setLayoutY(line.getLayoutY()); 
    selLine.setStrokeWidth(SELECTION_LINE_WIDTH); 
    selLine.setStroke(INVISIBLE); 
    selectionLines.getChildren().add(selLine); 
} 
connection.getChildren().add(selectionLines);