2013-01-10 55 views
2

我正在一個項目,我想要顯示圖像與覆蓋。面板不調整到其轉換的尺寸

我的想法是創建一個AncorPane,在其背景中放置一個ImageView,然後在其上放置幾個形狀。這確實有用。

由於圖像非常大,因此需要根據可用空間縮小比例。毋庸置疑,想要縮小與圖像相關的所有重疊形狀。在視覺上,這通過對AncorPane應用「比例變換」也起作用,但是這裏出現了我的問題。

AncorPane從它的孩子身上獲得它的大小。但即使它們縮小了,AncorPane仍保持未變形圖像的大小。這會產生大量的空白。 我認爲這是一個與不可調整大小的節點之間的佈局界限和父界限之間的差異的問題。

有沒有人有建議設置AncorPane礦石的實際大小另一種擺脫這種不需要的空白的方式。

實施例:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.SceneBuilder; 
import javafx.scene.control.ScrollPane; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.layout.VBox; 
import javafx.scene.shape.Rectangle; 
import javafx.scene.transform.Scale; 
import javafx.stage.Stage; 


public class test extends Application 
{ 
@Override 
public void start(final Stage stage) throws Exception 
{ 
    final ScrollPane scroll = new ScrollPane(); 
    final Scene scene = SceneBuilder.create().root(scroll).build(); 
    final VBox box = new VBox(); 

    final AnchorPane anchorPane = new AnchorPane(); 
    final ImageView imageView = new ImageView(); 
    final Shape overlayRectangle = new Rectangle(100, 100, 100, 100); 

    scroll.setContent(box); 
    box.getChildren().add(anchorPane); 
    anchorPane.getChildren().addAll(imageView, overlayRectangle); 
    overlayRectangle.toFront(); 

    imageView.setImage(new Image("http://cdn.sstatic.net/stackoverflow/img/sprites.png")); 

    final Scale scale = new Scale(0.5, 0.5); 
    anchorPane.getTransforms().add(scale); 

    stage.setScene(scene); 
    stage.show(); 
} 

public static void main(final String[] args) 
{ 
    launch(); 
} 
} 

運行,就可以看到,滾動條只消失時的窗口大小擴展到兩個時間的圖像尺寸的例子。當。我知道我可以禁用滾動條。這可能適用於示例代碼,但請記住,此示例在很大程度上縮短了。我甚至刪除了動態調整大小。

+0

你的意思是與'sizeToScene()'方法有關的東西嗎?試一試 –

+0

是的我想在AnchorPane功能上做類似'sizeToScene()'的事情。但窗格自動執行此操作。顯然他們調整到佈局邊界而不是兒童的實際可見邊界。這就是我想改變的。 – l2p

+0

可以。發佈[SSCCE](http://sscce.org/) –

回答

1

我要回答我的問題從ScrollPane documentation的情況下,報價有人發現這一點。

ScrollPane佈局計算基於滾動節點的layoutBounds而不是boundsInParent (可視邊界)。如果應用程序希望滾動基於節點的可視邊界(對於縮放內容等),則需要將滾動節點包裝到組中。

0

的問題是怎麼一回事,因爲你

final Scale scale = new Scale(0.5, 0.5); 
    anchorPane.getTransforms().add(scale); 

去除水垢,因爲它會已經sizeToScene,但你重新定義它。 它解決你的問題嗎?

還改變scale()方法的參數來增加或減少(縮放效果的種類)的空白問題。

或者insted的去除,將其更改爲:

final Scale scale = new Scale(1,1); 
anchorPane.getTransforms().add(scale); 
+0

沒有,這不能解決問題。當沒有任何東西被縮放(當我刪除比例時發生這種情況)佈局和實際可見邊界是相等的。那麼問題不會發生。但縮小圖像+覆蓋是我爲什麼要這麼做的主要原因。你可以刪除'sizeToScene()',因爲它實際上並沒有做任何可見的事情。 – l2p

+0

@ l2p哦!你的意思是你必須按比例縮小到(0.5,0.5),並且空白區域不會到來? –

+0

是的,這就是我的意思。 – l2p