将挥杆控制分成相等的部分

时间:2009-04-12 11:16:06

标签: java swing

我知道这将是一个愚蠢的问题。 请原谅我作为CS的n00b

我有一个继承自JComponent的新swing组件。 我试图在其表面上绘制线条以显示线条将控件分成相等的部分。代码看起来像

int spc;
spc = (int) Math.round((this.ZBar.getWidth() / this.ZBar.getModel().getModelSize()));

        for (int i = 0; i <= this.ZBar.getModel().getModelSize(); i++) {
            g.drawLine(i * spcing, 0, i *, this.ZBar.getHeight());

        }

this.ZBar.getModel()getModelSize();给出要分成的部分数量。 但是,在某些情况下,组件的最右端还有一些空间。我想这是由Math.round完成的类型转换。我怎么解决这个问题?

3 个答案:

答案 0 :(得分:1)

这是因为该除法是一个int型除法。例如:

5 / 2 == 2

Math.round在这里什么也没做。它已经被舍入(而不是Math.floor)。

要获得预期效果,请在分割前将int转换为双精度:

(double)5 / 2 == 2.5

或者在您的具体案例中:

spc = (int) Math.round(((double)this.ZBar.getWidth() / this.ZBar.getModel().getModelSize()));

答案 1 :(得分:0)

由于语法错误,您发布的代码无法编译,但我发现您的方法没有立即出现问题。你说问题出现了间歇性的问题。这表明问题可能在于swing的刷新方式,以及如何处理代码中的问题。试着读一下。

答案 2 :(得分:0)

非常感谢您的回复。 解决了这个问题。

我把所有那些整数混乱都加倍了。 然后使用Java2D包处理双打。

使用双参数创建Line2D类支持。