2014-11-24 4 views
0

У меня возник вопрос, когда я реализую интерфейс.Выполнение интерфейса метода

import java.awt.*; 
import java.awt.geom.*; 
import javax.swing.*; 

/** 
    An icon that has the shape of the planet Mars. 
*/ 
public class MarsIcon implements Icon 
{ 
    /** 
     Constructs a Mars icon of a given size. 
     @param aSize the size of the icon 
    */ 
    public MarsIcon(int aSize) 
    { 
     size = aSize; 
    } 

    public int getIconWidth() 
    { 
     return size; 
    } 

    public int getIconHeight() 
    { 
     return size; 
    } 

    public void paintIcon(Component c, Graphics g, int x, int y) 
    { 
     Graphics2D g2 = (Graphics2D) g; 
     Ellipse2D.Double planet = new Ellipse2D.Double(x, y, 
      size, size); 
     g2.setColor(Color.RED); 
     g2.fill(planet); 
    } 

    private int size; 
} 

    import javax.swing.*; 

public class IconTester 
{ 
    public static void main(String[] args) 
    { 
     JOptionPane.showMessageDialog(
      null, 
      "Hello, Car!", 
      "Message", 
      JOptionPane.INFORMATION_MESSAGE, 
      new MarsIcon(100)); 
     System.exit(0); 
    } 
}  

В IconTester я создаю только MarsIcon (100). Я не называю этот метод. Но кажется, что выполняется paintIcon (;;;). Почему? Автоматически называются методы?

+1

'paintIcon' вызывается, когда вы пытаетесь отобразить значок. Поскольку вы показываете диалог сообщения с этим значком, он будет вызываться. – BackSlash

+1

Если бы вы отлаживали и проверяли стек вызовов, вы бы видели, кто вызывает 'paintIcon'. – Smutje

ответ

2

Вы не вызываете метод paintIcon напрямую, это происходит с помощью диспетчера дисплея, когда ваш компонент является частью видимого интерфейса.

И вот оно, потому что вы добавили его в JOptionPane.

+0

спасибо! понял – user3199837

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