我在Java中遇到JSlider的问题我画了一个圆圈A,我想把另一个圆圈B放在第一个圆圈A里面。我想把第二个圆圈B的中心放在与中心相同的坐标上第一个圆圈A,然后我想用JSlider来增加或减少圆圈B的半径。麻烦的是,当你增加或减少滑块时,圆圈B的中心不会与A的中心保持对齐。基本上,我想要两个圆圈与SAME中心。有人可以指出我的错误吗?
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
答案 0 :(得分:1)
因为你必须改变圆圈左上角的位置。如果你改变半径,圆圈会更大/更小,所以如果你不改变左上角的位置就很明显,2个圆圈的中心将不会对齐
答案 1 :(得分: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)
最后,圈子B width
和height
等于其直径:radius * 2 = slider1Value * 2
。
<强>事实强>
进行此更改,它将像魅力一样:
paper.drawOval(70 - slider1Value, 70 - slider1Value, 2*slider1Value, 2*slider1Value);