2012-05-23 6 views
0

Я работаю над пользовательским компонентом Swing для моего приложения, и начал рисовать вещи с помощью public void paintComponent(Graphics g). Все работает отлично, за исключением того, что я не могу рисовать прямоугольники. Я думаю, что проблема связана с частью getX() и getY(), но я этого не знаю точно. Вот мой код:Графика не рисование в paintComponent (Graphics)?

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    if (mouseEntered) { 
     g.setColor(HIGHLIGHTED_COLOR); 
    } else { 
     g.setColor(BACKGROUND_COLOR); 
    } 

    g.fillRect(getX(), getY(), getWidth(), getHeight()); 


    //Draw rest of stuff (works fine) 

В API говорит, что он должен быть использован, как это: g.fillRect(x, y, width, height), и это то, что я делаю.

Остальная часть чертежа прекрасно работает, но я не могу понять, почему это не рисунок. Какие-либо предложения?

ответ

3

Я точно не знаю, как ваш компонент определяется, но значение по умолчанию для компонента «getX() метода s является X-координату компонент» верхнего левого углу s (по отношению к корневой компонент).

Когда вы рисуете в paintComponent(Graphics) методы компонент «s в свинге, происхождение Graphics контекста, что вы чертите к обычно находятся в верхнем левой части компонента самого, не корень Компонент.

Так делая этот призыв:

g.fillRect(getX(), getY(), getWidth(), getHeight()); 

Вы, вероятно, рисования прямоугольника за пределами клипа пределы компонента!

(например, если компонент находится в 100, 100 и имеет ширину 20 и высоту 20, прямоугольник вы рисунок, в абсолютных координат находится в (200, 200) к (220, 220))

Если вы хотите, чтобы нарисовать прямоугольник, который охватывает весь компонент, вы можете попробовать что-то больше, как это:

g.fillRect(0, 0, getWidth(), getHeight()); 

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

(используя предыдущий пример: Компонент в 100, 100 и ширине/высота 20, прямоугольник это будет сделать это в (100, 100) к (120, 120))

Надеется, что это помогает =)

+0

Оим! Это имеет смысл! Большое спасибо! – mattbdean

Смежные вопросы