2016-01-23 35 views
1

我遇到了drawOval函數的問題。我用它畫圓圈,但結果看起來不像一個圓圈。 我認爲這種行爲發生在Jpanel的一定高度之後。 向下滾動至最後,您可以得到如下圖所示的結果。 任何人都可以提供解釋嗎?DrawOval的意外行爲

Result after Execute the sample program

import java.awt.*; 
import java.awt.geom.*; 
import javax.swing.*; 

public class TestMain 
{ 
    public static void main(String[] args) 
    { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JScrollPane jsp = new JScrollPane(); 
     jsp.setViewportView(new TestPanel()); 
     f.getContentPane().add(jsp); 
     f.setSize(500,400); 
     f.setLocation(200,200); 
     f.setVisible(true); 
    } 
} 

class TestPanel extends JPanel 
{ 
    public TestPanel() 
    { 
     setPreferredSize(new Dimension(1960 , 77660240)); 
     setBackground(Color.white); 
    } 

    protected void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D)g; 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
          RenderingHints.VALUE_ANTIALIAS_ON); 
     g2.drawRect(30, 77660141, 100, 20); 
     g2.drawOval(15, 77660141, 10, 10); 
     g2.draw(new Ellipse2D.Double(140, 77660141, 
          10, 
          10)); 
     g2.draw(new Ellipse2D.Double(160, 77660141, 
          10, 
          10)); 
     g2.draw(new Ellipse2D.Double(180, 77660141, 
          10, 
          10)); 
     g2.draw(new Ellipse2D.Double(200, 77660141, 
          30, 
          30)); 
    } 
} 
+1

'setPreferredSize(new Dimension(1960,77660240));'......你預計77660240號碼會發生什麼?這比我當前的屏幕高出70 ** 000 **倍! –

+0

那麼使用JScrollPane有什麼好處? – MMM

+3

滾動窗格用於說明比可用可顯示空間大的組件。但不是那些**可笑地大於可用空間的組件。例如,考慮滑塊欄的事情。它縮放,以便更長的物體會產生更小的滑塊。但在70,000倍的差異,滑塊將'邏輯上'是一個像素高的一小部分!還有一個問題,即JRE是否有足夠的內存來處理這樣的大對象。如果我知道最終目的,我可能會提出更好的策略。 –

回答

0

改變面板的東西更合理,例:1000尺寸,它會正常工作。

+0

但是爲什麼它對drawRect正常工作,並沒有限制的大小。 – MMM

+0

不知道爲什麼,但這樣的大小肯定是絕對不合理的。我用7000000嘗試,它的工作原理,但即使這樣的大小是不現實的... ... –