首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSlider --需要的建议

JSlider --需要的建议
EN

Stack Overflow用户
提问于 2013-10-09 01:37:24
回答 2查看 265关注 0票数 2

我在Java中的JSlider有一个问题我画了一个圆A,我想把另一个圆B放在第一个圆A里面。我想把第二个圆B的中心放在与第一个圆A的中心相同的坐标上,然后我想用JSlider来增加或减小圆B的半径。问题是,当你增加或减少滑块时,圆B的中心不会与A的中心保持对齐。有人能指出我的错误吗?

代码语言:javascript
复制
    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
EN

回答 2

Stack Overflow用户

发布于 2013-10-09 02:18:40

因为你必须改变圆圈左上角的位置。如果你改变半径,圆会变大/变小,所以很明显,如果你不改变左上角的位置,两个圆的圆心就不会对齐

票数 1
EN

Stack Overflow用户

发布于 2013-10-09 03:49:42

理论

来自Graphics.drawOval() javadoc。当你画一个圆时,他们的(x,y)坐标不是它的中心,而是它的左上角。为了使你的B圆与A圆对齐,你需要计算它与最后一个圆的(x,y)坐标关系:

代码语言:javascript
复制
Circle A: (x,y) = (20,20); diameter = 100 ==> radius = 50; center = (x + radius, y + radius) = (70,70)

好了,您现在有了自己的中心:(70,70)。现在,slider1Value是你的新半径,所以你需要计算圆B的(x,y)坐标:

代码语言:javascript
复制
Circle B: center = (70,70); (x,y) = (centerX - radius, centerY - radius) = (70 - slider1Value, 70 - slider1Value)

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

事实

做出这样的改变,它就会像护身符一样起作用:

代码语言:javascript
复制
paper.drawOval(70 - slider1Value, 70 - slider1Value, 2*slider1Value, 2*slider1Value);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19254551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档