2013-11-07 2 views
1

ява paintComponent()Java paintComponent()

 class MyClass extends JComponent { 
     void paintComponent() { 
      //code for class here 
      } 
    } 

    class myTestClass extends JPanel { 
     MyClass temp = new MyClass(); 

     void paintComponent() { 
       super.paintComponent(); 


     static void main(String[] a) { 
      JFrame f = new JFrame(); 
       //Does the temp have to be added to the panel before it can be repainted 
     } 
    } //End Class 

Я знаю, что JPanel переходит в JFrame. Но должен ли быть добавлен класс (MyClass) в JPanel для paintComponent(), перекрашивая дочерний узел super.paintComponent(). Я бы подумал, что так будет. Если это так, то temp.repaint() должен перекрасить этот конкретный компонент в любом месте, где он вызывается, если super.paintComponent() перекрашивает компонент.

Это, кажется, ответ, который никто не имеет или, по крайней мере, что никто действительно не опубликовал. Мое объяснение может быть немного, поэтому я попытаюсь прояснить его здесь.

Если у меня есть несколько классов, расширяющих JComponent, и я хочу, чтобы все они использовались в классе, чтобы я мог их перекрасить. Допустим, один круг, прямоугольник, квадрат, и т.д. ..............

Если все они имеют paintComponent() с super.paintComponent() они должны быть в состоянии быть перекрашены с VariableName.repaint();

Должны ли они быть добавлены к JPanel, которые будут содержать их в качестве контента. И могут ли они быть вызваны из repaint() в любом месте кода (я думаю, что это так).

Driver класс:

class MyMainDriverClass { 
    A a = new A(); 
    B b = new B(); 
    C c = new C(); 

void someClass() { 
    a.repaint(); 
    b.repaint(); 
    c.repaint(); //this should repaint the components if the JPanel is inside of the JFrame 
       //(I didn't put this code in) 
} 
} 

Это должно перерисовать компонент выше, если все классы, которые создаются у paintComponent().

Doug Hauf

+2

Что ваш конкретный вопрос? Ваши примеры недействительны вообще. Пожалуйста, старайтесь сделать хороший вопрос, и у вас будет хороший ответ, конечно – nachokk

+0

Обычно нет необходимости называть 'repaint()' вручную. (Причина для этого - заставить недействительность рисованной графики - не рисовать их для начала). – user2864740

+0

Я хочу сделать, чтобы любой класс расширил JComponent, который затем можно добавить в любой другой класс. Затем я хочу иметь возможность вызвать метод repaint() переменной, который вызовет paintComponent(). Я делал много примеров только в графике и хотел бы иметь возможность перерисовывать() компоненты на экране по своему усмотрению. Я думаю, что по большей части человеку придется часто переписывать(), но я пытался сделать покерную игру и хотел иметь все в графике. T –

ответ

2

Да MyClass должны быть добавлены к чему-то, что является отображаемым на экране, чтобы быть окрашены. Здесь аргументация состоит в том, что MyClass extends JComponent и myTestClass extends JPanel, они никоим образом не связаны, поэтому вызов super.paintComponent изнутри myTestClass не будет писать или обновлять MyClass в любом случае.

Любая вещь, которую вы хотите окрашивать, должна быть добавлена ​​в отображаемый контейнер.

Посмотрите на Painting in AWT and Swing для получения более подробной информации о живописи.

Вы можете позвонить repaint на любой Component человека или его родителя контейнера в соответствии с требованиями

+0

Благодарим за помощь.Если мой основной класс расширяет JPanel, и я делаю JFrame и добавляю панель в фрейм, и у меня есть панель my.add (MyClass), я тогда должен иметь возможность перекрашивать компонент, когда когда-либо вызываю temp.repaint(). –

+0

Все было равным, да – MadProgrammer

+0

Если у меня есть класс, который расширяет JComponent с помощью paintComponent(), я должен иметь возможность вызвать repaint() из другого класса, если мой компонент добавлен в какой-то контейнер, например JPanel. Верный. У вас не будет простого рабочего примера? –

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