2017-12-14 8 views
0

ウィンドウリスナーを使用してクラスを呼び出すと、プロデュースされたイメージがキャンバスに表示され、すぐに消えます。私はmouseclicklistenerやactionperformedlistenerのようなリスナーを使うと同じ問題はありません。最初にプログラムを開いたときに画像が自動的に表示されるようにしたいと思います。誰も私になぜこれが起こるか説明することができますか?イメージが表示され、ウィンドウリスナーを使用すると消えます。

private void nyttkart(){ 
    vindu = "&WIDTH=" + bredde + "&HEIGHT=" + høyde; 
    bbox = "&BBOX=" + String.valueOf(vestl) + "," + String.valueOf(sørl) 
      + "," + String.valueOf(østl) +"," + String.valueOf(nordl); 
    try { 
     URL kart = new URL("http://openwms.statkart.no/skwms1/wms.topo4?VERSION=1.3.0" 
       + "&REQUEST=GetMap&CRS=EPSG%3A25832&FORMAT=image/png" 
       + "&SERVICE=WMS&LAYERS=Hoydelag,Arealdekkeflate," 
       + "Vannflate,Vannkontur,Elver,Hoydekurver,Veger,Jernbane" 
       + bbox + vindu); 
     InputStream is = kart.openStream(); 
     Image image = ImageIO.read(is); 
     canvas1.getGraphics().drawImage(image,0,0,null); 
    } catch (MalformedURLException ex) { 
     Logger.getLogger(SOSI_Utvalg.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(SOSI_Utvalg.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

答えて

0

これは絵画の仕組みではありません。あなたはキャンバスにあなたにグラフィックスを教えてはいません。むしろ、ペイントメソッドをオーバーライドし、ペイントする必要があるときにシステムはそのメソッドを呼び出します。詳細はhttps://docs.oracle.com/javase/tutorial/uiswing/painting/を参照してください。

Component imageComponent = new JLabel(new ImageIcon(kart)); 

あなたがイメージがロードできない場合IOExceptionsを受信したい場合は、最初にイメージをロードし、代わりにそれを渡すことができます:あなたは画像を表示するようにキャンバスを必要としない、と述べた

補足として、String.valueOfはオブジェクトを連結してStringを形成するときに暗黙的に呼び出されます。明示的に呼び出す必要はありません。

bbox = "&BBOX=" + vestl + "," + sørl + "," + østl +"," + nordl; 
関連する問題