Краска на контейнере добавляется в jcomponent
-
09-10-2019 - |
Вопрос
У меня есть Jrame, на котором я добавляю некоторые объекты JComponent. Каждый JComponent имеет список контейнеров, которые я добавляю с помощью JComponent.add (компонент).
Сейчас в моем главном классе JComponent, называемый MyComponent, я переопределяю защищенный метод PaintComponent, где я могу покрасить вещи, которые работает довольно хорошо.
Но я не хочу рисовать на главном JComponent, я только хочу нарисовать контейнеры, которые я добавил к моему главному JComponent.
Так что в MyComponent в PaintComponent я делаю следующее.
protected void paintComponent( Graphics g) {
super.paintComponent( g);
Graphics page_g = this.getPage( "main").getGraphics();
page_g.setColor( Color.RED);
page_g.drawRect( 10, 10, this.getWidth() - 20, this.getHeight() - 20);
page_g.setColor( Color.BLUE);
page_g.drawString( "HELLO WORLD", this.getWidth() / 2, this.getHeight() / 2);
}
Линия это. GTEPAGE («Главная»). GetGraphics (); Занимает графический объект из одной из моих контейнеров, добавленных в список контейнеров MyComponents и, конечно, в главный список компонентов, используя метод zamponents jComponents. Контейнер установлен для видимого, вызывая SETVISIBLE (TRUE); метод.
Но ничего не происходит. Экран пуст. Когда я заменил страницу_Г с G, то покрасочные работы, потому что его картина на моем JComponent (MyComponent), но я хочу рисовать на контейнере, который является детьми MyComponent в этом случае.
Я часто слышал: «Никогда не используйте GetGraphics ()». Но как еще можно только рисовать только на подъемных компонентах родительского компонента, когда призывается метод RapentsComponent Rapide?
Решение
На самом деле лучшая ставка состоит в том, чтобы иметь классы, которые на самом деле выполняют настраиваемую живопись, переопределяют свой собственный метод PaintComponent (). Пусть AWT беспокоится о графических контекстах.