2016-04-07 15 views
4

JavaFXアプリケーションにlogoというsvgグラフィックを表示したいとします。私はWebViewを使用し、WebView経由でグラフィックを表示することに決めました。WebViewでSVGを固定ピクセルの高さに拡大する方法は?

FXMLファイル

[...] 
<WebView fx:id="logo" disable="true" maxHeight="100" minHeight="100" minWidth="100" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" /> 
[...] 

メインコントローラクラス

 // [...] 
     @FXML 
     WebView logo = new WebView(); 

     // [...] 
     @Override 
     public void initialize(URL location, ResourceBundle resources) { 
     // [...] 
     String logoUrl = Main.class.getResource("FILENAME.svg").toExternalForm(); 
     logo.getEngine().load(logoUrl); 
     // [...] 
    } 

グラフィック表示されますが、サイズはオフになっています。私はそれを固定ピクセル高さに自動的に調整したいと思います。私の問題は、正しい要因を見つけるために永遠に息を吹き返すことができ、また、svgを変更するときにも、望ましくない再調整が必要になるため、私は因子、logo.setScaleX(0.8d);logo.setScaleY(0.8d);でスケールすることしかできません。ですから、私の質問は、WebView(コンテンツ)を幅の縦横比を維持する固定ピクセルの高さ(たとえば100ピクセル)にスケールするにはどうすればいいですか?

答えて

0

maxWidht maxHeightまたはprefWidth prefHeightプロパティを使用してみましたか?

この作品以外では唯一の選択肢は、scaleX & scaleYで行うことです。 あなたは何らかのルーチンを書くだけで、それはあなたのためになります。

class WebViewUtil { 

    public static void scaleTo(WebView view, Int size) { 
     double currentHeight = view.getHeight(); 
     double currentWidth = view.getWidth(); 

     double scaleX = size/currentWidth; 
     double scaleY = size/currentHeight; 
     double scale = Math.min(scaleX, scaleY); 

     view.scaleX(scale); view.scaleY(scale); 
    } 

} 
+0

'maxWidht'、' maxHeight'などはビューをクロップするだけで、ロゴの半分だけが表示されているようです。 – PendingValue

+0

あなたの 'scaleTo(WebView、Int)'は私のためのトリックをしていないようです。 'Int size'はピクセル単位の高さ/幅ですと思いますか? – PendingValue

0

SVGファイルの幅/高さのプロパティは何も言いませんか?もしそうなら、両方とも100%に設定してみましたか?

+0

はい、プロパティが存在し、ファイルにそのプロパティが表示されます。これまでは、ファイルを手作業で編集し、それを自分の望む高さまで拡大しました。しかし、それはJavaでどのように行われますか? – PendingValue

+0

待ち、私はSVGファイル内のsvgタグの幅と高さの属性を意味しました。それらを100%に設定しましたか? – Tomas

関連する問題