2

我在 Java 中遇到了 JSlider 的问题 我画了一个圆 A,我想将另一个圆 B 放在第一个圆 A 内。我想将第二个圆 B 的 CENTER 放在与第一个圆的中心相同的坐标处圆A,然后我想使用JSlider来增加或减少圆B的半径。问题是,当你增加或减少滑块时,圆B的CENTER不会与A的中心对齐。基本上,我想要两个具有相同中心的圆圈。有人可以指出我的错误吗?

    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
4

2 回答 2

1

因为您必须更改圆圈左上角“角”的位置。如果你改变半径,圆更大/更小所以很明显,如果你不改变左上角的位置,2个圆的中心将不会对齐

于 2013-10-08T18:18:40.253 回答
0

理论

来自Graphics.drawOval() javadoc。当你画一个圆时,它们的(x,y)坐标不是它的中心,而是它的左上角。为了使您的 B 圆与 A 圆对齐,您需要计算其相对于最后一个圆的 (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)

最后,圆 Bwidthheight都等于它的直径:radius * 2 = slider1Value * 2

事实

进行此更改,它将像魅力一样发挥作用:

paper.drawOval(70 - slider1Value, 70 - slider1Value, 2*slider1Value, 2*slider1Value);
于 2013-10-08T19:49:41.843 回答