2015-10-25 3 views
0

Новое в java: я переделал краску() и положил в нее кое-что; то я переопределяю paintComponent(), и я заметил, что код в paint() не запускается. Я забыл что-то сделать, или я просто не знаю? (Я знаю, что это хорошая практика, чтобы использовать @Override, но это один из тех дней)Java: переопределение краски() И paintComponent()

private Image dbImage; 
private Graphics dbg; 

public void paint(Graphics g) 
    dbImage = createImage(getWidth(), getHeight()); 
    dbg = dbImage.getGraphics(); 
    paintComponent(dbg); 
    g.drawImage(dbImage, 0, 0, this); 

    g.fillOval(0, 0, 10, 12); 
} 
public void paintComponent(Graphics g) { 
    setBackground(Color.CYAN); 

    double i = .25; 
    if (du) { 
     y -= i; 
    } 
    if (dr) { 
     x += i; 
    } 
    if (dd) { 
     y += i; 
    } 
    if (dl) { 
     x -= i; 
    } 

    if (x < 0) { 
     x = 0; 
    } 
    if (x > getWidth() - 25) { 
     x = getWidth() - 25; 
    } 
    if (y < 25) { 
     y = 25; 
    } 
    if (y > getHeight() - 25) { 
     y = getHeight() - 25; 
    } 

    g.drawOval((int) x, (int) y, 25, 25); 
    repaint(); 

} 
public static void main(String[] args) { 


} 

И несвязанной теме: что перекрасить() делать?

+1

'Я знаю, что это хорошая практика для использования @override,' - тогда используйте его. Нет никаких оправданий для ярлыков. – camickr

+0

Методы краски и краскиКомпонент вызывается системой довольно часто, часто несколько раз в секунду. Загрузка/создание изображения внутри метода рисования заметно ухудшит производительность. – VGR

ответ

2

Не переопределяйте paint() и не вызывайте метод рисования напрямую. Механизм окраски Swing будет следить за тем, чтобы надлежащие методы окраски были своевременными.

Пользовательская покраска выполняется путем переопределения paintComonent(...) JPanel (или JComponent). Затем вы добавляете панель в рамку.

Прочтите раздел из учебника Swing для получения дополнительной информации и рабочих примеров.

что такое перекрашивание() do?

В нем планируется перекраска компонента. RepaintManager объединит запросы перерисовки в один запрос на краску, чтобы сделать картину более эффективной.

Вы никогда не должны ссылаться на repaint() в методе рисования. Вы вызываете repaint() в методе setter при изменении свойства класса. Например, используя методы, такие как setForeground(), setBackground() вызовет repaint() компонента.

Новое в Java:

Я предлагаю вам сохранить ссылку на свинг учебник пригодится для обучения основам Swing.

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