2
我正在使用JavaFX 2.0開發項目。將ScrollPane設置爲期望的位置
當用戶點擊的源代碼同步按鈕時,應用程序將顯示圍繞UML模型等中的氣泡的相關源代碼:
場景當用戶創建一個UML模型像下面開始以下:
但是,正如你可能意識到了泡沫,這是在頂部創建不完全符合窗格。該窗格的目標視圖應該是這樣的:
即使我知道,我應該使用HValue
和VValue
屬性來實現這一點。我不明白我應該如何設置這些新值ScrollPane
。
ScrollPane的大小是8000 x 8000,我創建了一個不可見的矩形,通過調用rescaleView()函數來覆蓋所有的UML模型和氣泡。所以根據這個矩形的值,我重新調整ScrollPane的大小,但是我無法再移動視口中心。下面是縮放功能:
private void rescaleView() {
double MARGIN = 5.0;
List<BubbleView> bubbleViews = new ArrayList<>(diagramController.getAllBubbleViews());
double xMin = bubbleViews.get(0).getX();
double yMin = bubbleViews.get(0).getY();
double xMax = bubbleViews.get(0).getX() + bubbleViews.get(0).getWidth();
double yMax = bubbleViews.get(0).getY() + bubbleViews.get(0).getHeight();
if(bubbleViews.size() > 0) {
for(int i = 1; i < bubbleViews.size(); i++) {
if((bubbleViews.get(i).getX() + bubbleViews.get(i).getWidth()) > xMax) {
xMax = bubbleViews.get(i).getX() + bubbleViews.get(i).getWidth();
}
if(bubbleViews.get(i).getX() < xMin) {
xMin = bubbleViews.get(i).getX();
}
if((bubbleViews.get(i).getY() + bubbleViews.get(i).getHeight()) > yMax) {
yMax = bubbleViews.get(i).getY() + bubbleViews.get(i).getHeight();
}
if(bubbleViews.get(i).getY() < yMin) {
yMin = bubbleViews.get(i).getY();
}
}
double toBeScaled = Math.min((Math.max(diagramController.getScrollPane().getWidth(), diagramController.getScrollPane().getHeight())/Math.max((xMax - xMin), (yMax - yMin))),(Math.min(diagramController.getScrollPane().getWidth(), diagramController.getScrollPane().getHeight())/Math.min((xMax - xMin), (yMax - yMin)))) * 100;
diagramController.getGraphController().zoomPane(toBeScaled - MARGIN);
diagramController.getGraphController().center(xMin, yMin);
}
}
但低於center(x,y)
功能不會使視中心:
public void center(double x, double y) {
ScrollPane scrollPane = diagramController.getScrollPane();
double xScroll = x/8000; //8000 is the size of aDrawPane set in view.classDiagramView.fxml
double yScroll = y/8000;
scrollPane.setHvalue(xScroll);
scrollPane.setVvalue(yScroll);
}
我應該如何設置這些setHValue
和setVValue
?
在此先感謝。
它很完美!非常感謝!順便說一句,你對toBeScaled的錯誤是正確的。正如你所說,我改變了它。 –