使用Jpanel.getWidth()计算不起作用

时间:2015-12-28 20:50:30

标签: java

注意:我无法为此问题找到合适的标题......

class MyPanel设置JPanel并在其上设置自定义绘图。为了使图形适合在JPanel中设置的class的实际尺寸,我需要计算JPanels宽度或高度与int scale的比率}。 我需要ratio的小数部分,因为它取决于它< /> 0.5我想以不同的方式对待结果。

public class MyPanel extends JPanel {

    public  void setUp(int px, int py, int width, int height){
        this.setBackground(Color.WHITE);
        this.setBounds(px, py, width, height);
    }

    int scale = 35;

    public int plusX(){
        double ratio = this.getHeight()/scale;
        long integer;
        double fractional;
        int plusX = 0; 

        integer = (long) ratio; 
        fractional = ratio - integer; 
        if (fractional > 0.5){
            plusX = (int) (scale*fractional);   
        }
        if (fractional < 0.5 ){
            plusX = (int) (-scale*fractional); 
        }
        System.out.println("ratio: "+ratio+ " integer: "+integer+" fractional: "+fractional+" plusX: "+plusX);
        return plusX;
    }
}

width = 1254, height = 648scale = 35的输出结果为:

ratio: 18.0 integer: 18 fractional: 0.0 plusX: 0

但是18是错的,导致fractional = 0.0 scale*ratio应生成height(例如:35*18.51=648 fractional = 0.51}。

无论我选择哪种比例值,比率始终保持准确.0。

2 个答案:

答案 0 :(得分:3)

documentation相同,getHeight()给出了intscale也是int。在Java中,除以2 {int}得到int,因此ratio变为18

要解决这个问题,请将scale声明为double,因为thag会产生一个浮点数,这就是你所追求的。

答案 1 :(得分:1)

scale和getHeight()的返回值都是整数,所以即使你的ratio变量初始化为double,你也要划分两个整数,这意味着它只会给你一个整数作为答案。您需要确保将一个(或两个)值转换为double,以便获得正确的答案,这将有助于您完成剩余的计算。

示例:

double ratio = (double) this.getHeight() / scale;