2012-06-03 46 views
0

我試圖將特定的jInternalFrame保存爲文件作爲圖片。內部幀位於​​的​​中的jFrame中。除了50%的內部幀以外,讀數很好。它不想顯示讀數的其餘部分,因此沒有錯誤。我想擴大圖像的視圖...任何人都可以幫助我嗎?將java寫入文件時產生特定讀數的問題

這裏是其經由上單擊監聽激活方法:

private void tallennus() { 
    setContentPane(jInternalFrame1); 
    this.pack(); 

    Dimension size = jInternalFrame1.getSize(); 
    BufferedImage image = new BufferedImage(size.width, (int)PageSize.A4.getHeight()+(int)PageSize.A4.getHeight(), 
    BufferedImage.TYPE_INT_RGB); 
    Graphics2D g2 = image.createGraphics(); 
    g2.setBackground(Color.WHITE); 
    g2.clearRect(jInternalFrame1.getX(),jInternalFrame1.getY(),size.width,(int)PageSize.A4.getHeight() + (int)PageSize.A4.getHeight()); 
    g2.fillRect(jInternalFrame1.getX(),jInternalFrame1.getY(),size.width,(int)PageSize.A4.getHeight() + (int)PageSize.A4.getHeight()); 
    g2.scale(1, 0.75); 

    super.setPreferredSize(size); 
    super.paintComponents(g2); 
+1

爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

回答

2
  • 不通過使用paintComponents(塗料)使用paintComponent()

  • 不必油漆化背景的JInternalFrame直接使用paintComponent()

  • 放在那裏JPanelJComponent

  • ,如果你想只顯示圖像,負載形象Icon的使用,而不是JLabel

  • CardLayoutJInternalFrames

  • 真正雁遲早有SSCCE

  • 編輯您的問題
+0

謝謝你願意幫忙...我目前正試圖將這個答案應用到實踐中...它給了我一些很好的想法.. SSCCE將很難拉動因爲代碼頁超過10,000行,所以解析包括neccecary變成和問題。 – NeedyHelpo

+0

我應用了這些筆記,但問題似乎是因爲Jinternalframe不是完全可見的,但存在於JScrollPane中,它被部分切斷......所以我應該考慮呈現不可見組件,我假設 – NeedyHelpo

+0

你必須調用如果你想獲得一些有用的信息,那麼在容器或容器上的pack()必須在屏幕上顯示一次 – mKorbel

0

非常感謝你的想法...給我所有的幫助,我需要接近問題..我意識到這些代碼有些是多餘的,但我仍然會發布它。

private void tallennus(){ 

    JPanel drawingPanel = new JPanel(); 
    drawingPanel.setSize(new Dimension((int)PageSize.A4.getWidth(),(int)PageSize.A4.getHeight())); 

jPanel11.setBackground(Color.WHITE); 
jScrollPane27.setBackground(Color.WHITE); 
jPanel11.setBackground(Color.WHITE); 
jTabbedPane1.setBackground(Color.WHITE); 
jPanel10.setBackground(Color.WHITE); 
    drawingPanel.setBackground(Color.WHITE); 
    drawingPanel.setForeground(Color.WHITE); 
    add(drawingPanel); 

Container cont = jInternalFrame1; 
jInternalFrame1.pack(); 
String Ifra = jInternalFrame1.getComponents().toString(); 

BufferedImage sama = (BufferedImage) cont.createImage((int)PageSize.A4.getWidth(),(int)PageSize.A4.getHeight()+(int)PageSize.A4.getHeight()); 
drawingPanel.add(cont); 
    setContentPane(drawingPanel); 

this.pack(); 

Dimension size = drawingPanel.getSize(); 
    BufferedImage image = new BufferedImage(size.width, (int)PageSize.A4.getHeight()+400, 
    BufferedImage.TYPE_INT_RGB); 
    Graphics2D g2 = image.createGraphics(); 
    g2.setBackground(Color.WHITE); 
    g2.clearRect(0,0,size.width,(int)PageSize.A4.getHeight() + 400); 
g2.clipRect(40, 90, 1200, 1450); 

    g2.drawString(Ifra, TOP_ALIGNMENT, TOP_ALIGNMENT); 
    g2.drawImage(sama, null, cont); 
    g2.clipRect(40, 90, 1200, 1450); 

    this.pack(); 

    paint(g2); 

    try{ 
    ImageIO.write(image,"jpeg",new File("snap.jpg")); 
    } 
    catch(Exception e){} 
    }