код работает для java-графики, но не для graphics2d

внутри компонента краски. он принимает g в качестве параметра, а g может быть Graphics или Graphics2D. класс расширяет jpanel. тогда:

super.paintComponent(g);
this.setBackground( Color.BLACK );

если g это графика, то работает, а если это graphics2d, то нет. он компилируется с обоими, но graphics2d не меняет цвет фона. почему?


person Community    schedule 23.02.2009    source источник


Ответы (1)


JPanel (который является подклассом < a href="http://java.sun.com/javase/6/docs/api/javax/swing/JComponent.html" rel="nofollow noreferrer">JComponent) имеет только paintComponent(Graphics). У него нет метода с сигнатурой paintComponent(Graphics2D).

Переопределить метод paintComponent(Graphics) можно следующим образом:

public void paintComponent(Graphics g)
{
    // Do things.
}

Однако определение метода с сигнатурой paintComponent(Graphics2D) допустимо, как показано ниже, но он никогда не будет вызываться, так как не переопределяет метод, определенный в JComponent:

public void paintComponent(Graphics2D g)
{
    // Do things.
    // However, this method will never be called, as it is not overriding any
    // method of JComponent, but is a method of the class this is defined in.
}

спецификации Java API для класса JComponent (который является суперклассом JPanel) имеет сводку методов, в которой перечислены все методы, являющиеся частью класса.

Больше информации о рисовании в Swing;

person coobird    schedule 23.02.2009