2013-10-08 120 views
2

我在Java中的JSlider出現問題我畫了一個圓A,並且我想把另一個圓B放在第一個圓A的內部。我想將第二個圓B的中心放在與第一個圓A的中心座標相同,然後我想使用JSlider來增大或減小圓B的半徑。問題是,當您增大或減小滑塊時,圓B的中心不會與A的中心基本上,我想要兩個同一個中心的圓圈。請有人指出我的錯誤嗎?JSlider - 需要的建議

slider1 = new JSlider(JSlider.HORIZONTAL,10,100,10); 
    window.add(slider1); 
    slider1.addChangeListener(this); 

    Graphics paper = panel.getGraphics(); 
    int slider1Value = slider1.getValue(); 
    paper.setColor(Color.white); 
    paper.fillRect(0, 0, 500, 500); 

    paper.setColor(Color.pink); 
    paper.fillOval(20,20,100,100); // this is circle A 

    paper.drawOval(60,60,slider1Value,slider1Value); // this is circle B slider 
+2

圈子內的人與他們的X繪製,Y座標爲中心,而是左上角。你需要適應這個偏移量。 – Obicere

+0

請勿使用component.getGraphics,否則 – kleopatra

回答

1

因爲你必須改變圓的左上角的位置。如果更改半徑,圓是大/小所以很明顯,如果你不改變左上角短號的位置,2個圈的中心不會被對齊

0

理論

Graphics.drawOval()的javadoc 。當你畫一個圓時,他們的座標不是它的中心,而是它的左上角。爲了讓您的乙圈有圓圈排列的,你需要計算其(X,Y)座標親戚到最後一個:

Circle A: (x,y) = (20,20); diameter = 100 ==> radius = 50; center = (x + radius, y + radius) = (70,70) 

好了,你有你的心現在:(70,70)。現在,slider1Value是你的新半徑,所以你需要計算圓B (x,y)座標:

Circle B: center = (70,70); (x,y) = (centerX - radius, centerY - radius) = (70 - slider1Value, 70 - slider1Value) 

最後,圓B widthheight是等於它的直徑:radius * 2 = slider1Value * 2

事實

進行此項更改,它會像一個魅力:

paper.drawOval(70 - slider1Value, 70 - slider1Value, 2*slider1Value, 2*slider1Value); 
+1

dic19,muchas gracias! – JCDyson

+1

@JCDyson de nada! :-)如果這個答案適合你,請不要忘記接受它。看看這個鏈接:[接受答案:它是如何工作的](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) – dic19