我知道这将是一个愚蠢的问题。 请原谅我作为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完成的类型转换。我怎么解决这个问题?
答案 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类支持。