2014-12-31 131 views
0

我想,我點擊一個按鈕的代碼應該添加一個圓圈框但是我用的是repaint()方法總是畫一個圓圈,每次加在我的圈子JFrame不同位置添加界

public void paint(Graphics g){ 
    super.paintComponents(g); 

    Graphics2D g2= (Graphics2D)g; 
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
    Ellipse2D.Double circle = new Ellipse2D.Double(); 
    circle.width=50; 
    circle.height=50; 
    circle.x=getX(); 
    circle.y=getY(); 
    g2.draw(circle); 
} 

public static void main(String args[]){ 
    new PaintComponents(); 
} 

@Override 
public void actionPerformed(ActionEvent e) { 
    if(e.getSource()==bt){ 
     String s=JOptionPane.showInputDialog("enter a number"); 
     if(getX()==0){ 
     setX(100); 
     setY(200); 
     repaint(); 
     } 
     else { 
      setX(200); 
      setY(200); 
      repaint(); 
     } 
    } 
} 

這是代碼。我想添加很多圈子。我該怎麼辦?

在這個問題上我的目標是用圓圈和線路做出BST樹圖形,但我不知道如何添加圈子。我應該將Jframe中的節點一步一步地顯示爲圓圈,我的意思是說,每次我添加一個節點時,都應該在正確的位置創建一個圓圈。我怎樣才能做到這一點?

+0

那麼你只畫一個圈;你實際上應該從某種你可以從你的按鈕的偵聽器添加的圈子列表中抓取。你也永遠不會顯示你的按鈕的'ActionListener'全部小寫輸入 –

+0

1)詞很難讀,就像試圖聽人誰是喃喃自語。請在句子的開頭使用大寫字母,單詞I以及諸如'ArrayList'或Oracle的專有名稱。2)源代碼中的單個空白行是所有需要的。 '{'之後或'}'之前的空行通常也是多餘的。 3)爲了更快地獲得更好的幫助,請發佈[MCVE](http://stackoverflow.com/help/mcve)(最小完整可驗證示例)或[SSCCE](http://www.sscce.org/)(簡稱,自包含,正確的例子)。 –

+0

我想要添加圖像,但我不能。什麼是聲譽? –

回答

2
  1. 不覆蓋paint,然後調用super.paintComponent,覆蓋paintComponent方法來代替,然後調用super.paintComponent
  2. Graphics是一個共享的資源,它使用的所有部件在給定的油漆週期內被塗。對它進行更改時要小心,比如設置渲染提示,因爲這些更改會影響所有在此之後的組件。你應該恢復Graphics上下文回到之前的狀態儘可能paint方法存在之前,更重要的是,創建一個使用Graphics#createGraphics上下文的副本,但paint方法存在之前,別忘了副本的dispose
  3. 不要覆蓋頂層容器的paint方法,而是通過創建從東西像伸出一個JPanel自定義組件開始,按照步驟1 ...
  4. 不要修改的的X/Y位置組件(setX/setY),這些在做什麼,你認爲他們應該
  5. 建立某種形式的List。在列表中,添加Ellipse2D的每個實例。當調用paintComponent時,遍歷列表並繪製Ellipse2D的每個實例。你將無法控制顏色,但你會得到圈子繪畫。
+0

5.用Ellipse2D和Color創建你自己的類。 –

+0

@GilbertLeBlanc曾經想過,但想保持簡單;) – MadProgrammer

0

事情是paintComponent不適用於頂層容器,如JFrame調用super.paint(); 或相反,你可以只讓一個面板,並把它添加到框架,只是重寫paintComponent你也知道它的執行剩下的就是okkk我

1

看看Custom Painting Approaches這顯示了兩種常見的方法可以做到這一點:

  1. 保留對象的List作畫,然後通過該列表中的paintComponent()方法進行迭代。
  2. 請在一個BufferedImage的風俗​​畫,然後就在面板

該鏈接包含工作每種方法的例子顯示的BufferedImage。