Java 将回转控制拆分为相等的部分

Java 将回转控制拆分为相等的部分,java,swing,Java,Swing,我知道这是个愚蠢的问题。 请原谅我作为n00b进入CS 我有一个从JComponent继承的新swing组件。 我试图在其表面绘制线条,以显示线条将控件分割为相等的部分。代码看起来像 int spc; spc = (int) Math.round((this.ZBar.getWidth() / this.ZBar.getModel().getModelSize())); for (int i = 0; i <= this.ZBar.getModel().getModelS

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

我有一个从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());

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

对于(int i=0;i由于语法错误,您发布的代码将无法编译,但我认为您的方法不会立即出现问题。您说问题是间歇性出现的。这表明问题可能在于swing刷新的方式,以及您在代码中如何处理它。请试着仔细阅读。

这是因为划分是不正确的整型除法。例如:

5 / 2 == 2
Math.round在这里什么都不做。它已经被舍入(改为Math.floor)

要获得预期效果,请在除法之前将int值转换为double:

(double)5 / 2 == 2.5
或者在您的具体情况下:

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

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

我把那些整数的乱七八糟搞得翻了一番。 然后使用Java2D包来处理double

Line2D类支持使用双参数创建