2011-10-01 97 views
0

以下代碼用於在JPanel上可視化分子,除非在運行時更改JPanel的大小時不會重新縮放。化學開發工具包用於生成渲染圖像。一個分子被傳遞給MoleculeViewer進行可視化。我究竟做錯了什麼??Java JPanel Paint Scaling

+1

如果不熟悉你所使用的圖書館,你很難說出什麼問題。由於該庫不是核心Java的一部分,只被少數訪問此網站的用戶(如果有的話)使用,這是一個非常本地化的問題,這可能不是找到解決方案的最佳網站。你有沒有試過在面向化學開發工具包用戶的網站上提問? –

+0

我同意以前的評論,但請注意,如果API返回'Image'或'BufferedImage',則可以調整圖像大小。當然,通過API生成所需大小的圖像可以獲得更好的結果,但這是您和API之間的關係。 –

回答

0
Adding following resolved the not redrawing upon scaling problem 

renderer.paint(molecule_, new AWTDrawVisitor(g2), new Rectangle2D.Double(0, 0, w, h), false); 
      g2.dispose(); 
      } 
      else 
2
What am I doing wrong?? 
  • 爲什麼你需要setSize(new java.awt.Dimension(400, 400));

  • 把你image = new BufferedImage(this.WIDTH, this.HEIGHT, BufferedImage.TYPE_INT_RGB);作爲IconJLabel,那麼你就可以刪除任何有關paintComponent()

  • ,那麼你可以返回JLabel而不是JPanel,但默認情況下JLabel是半透明的,或者將JLabel設置爲JPanel在這種情況下使用適當的LayoutManagerBorderLayout.CENTER

  • 你必須檢查你如何添加MoleculeViewer方式,什麼LayoutManager有使用???,因爲只有LayoutManager可以使用此作業正確地調整大小(或者不調整)集裝箱的孩子的用Top-Level Container

  • MoleculeViewer必須retuns PreferredSize其父

+0

我也試過JLabel。相同的結果。我可以清楚地看到ResizeListener正確設置圖像的尺寸。但實際的分子結構停留在第一個尺寸。 – lochi