Отрицательный номер в fillRect () - PullRequest
3 голосов
/ 18 ноября 2010

Я использую отрицательное число, чтобы fillRect() пошел в обратном направлении.Он хорошо работает на моем компьютере, но мои друзья не видят, как он работает должным образом.Что мне делать?

page.fillRect (12, 12, -5, 10);

Ответы [ 2 ]

1 голос
/ 18 ноября 2010

Есть две школы мысли об этом.

Во-первых, любой многоугольник с отрицательным размером является бессмысленным и не должен отображаться - что вы имеете в виду, его ширина -10 пикселей?

Другое - отрицательное измерение просто инвертирует многоугольник на оси этого измерения.

В большинстве систем окраски применяется последняя логика. Мой опыт рисования на Java всегда был таким, хотя у меня не часто бывали отрицательные измерения, поэтому мой опыт может не иметь большого значения.

Что вы можете сделать:

  1. Возможно, вам потребуется, чтобы ваш друг обновил свою версию Java.
  2. В противном случае вы должны выполнить инверсию самостоятельно, проверив наличие отрицательного измерения и перенеся свое происхождение x, y, чтобы сделать измерение положительным. То есть прямоугольник [10,10, -5,5] пространственно эквивалентен [5,10,5,5]. Отрицательное измерение добавляется к исходной координате, а затем делается абсолютным. Обратите внимание, что это может привести к отрицательному происхождению, но, надеюсь, система рисования не испортит совсем .

Лично я предпочел бы потребовать более новую JVM, если это возможно.

В противном случае мой рекомендуемый код будет:

public void fillRect(Graphics gc, int x, int y, int width, int height) {
    if(width <0) { x+=width;  width =-width;  }
    if(height<0) { x+=height; height=-height; }
    gc.fillRect(x,y,width,height);
    }

Также обратите внимание, что вам понадобится аналогичное для других операций рисования.

Наконец, я бы с подозрением отнесся к еще одной ошибке во всем этом, поскольку поведение очень удивительно - я бы упростил все до минимальной тестовой программы с выводом отладки и проверял бы, прежде чем переносить дерьмовую загрузку примитивов рисования.

0 голосов
/ 18 ноября 2010

Я предполагаю, что вы и ваш друг используете две разные версии Java. Ваши поддержки заполнены отрицательным значением, а ваши друзья - нет. (или даже SDK против JRE).

Это показывает, что вы должны написать это по-другому, чтобы ваш апплет работал на всех версиях.

почему бы просто не сдвинуть вашу х -5?

если вы хотите сделать это более аккуратно

public void myfillRect(graphics page, int x, int y, int width, int height){
    if(width <0)
        x-=Math.abs(width);
    if(height <0)
        y-=Math.abs(height);

    page.rectfill(x,y,Math.abs(width), Math.abs(height));
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...