Вопрос

У меня есть 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 беспокоится о графических контекстах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top