рисовать на контейнере, добавляемом в jcomponent - PullRequest
2 голосов
/ 10 января 2011

У меня есть jrame, в который я добавляю несколько объектов JComponent. У каждого JComponent есть список контейнеров, которые я добавляю с помощью JComponent.add (Component).

Теперь в моем основном классе 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);
}

Строка this.getPage ("main"). GetGraphics (); берет объект Graphics из одного из моих контейнеров, добавленных в список контейнеров MyComponents и, конечно, в основной список компонентов, используя метод add JComponents. Контейнер устанавливается видимым, вызывая setVisible (true); Метод.

Но ничего не происходит. Экран пуст. Когда я заменяю page_g на g, тогда рисование работает, потому что его рисование на моем JComponent (MyComponent), но я хочу рисовать на контейнере, который в этом случае является дочерним для MyComponent.

Я часто слышал "Никогда не используйте getGraphics ()". Но как еще можно рисовать ТОЛЬКО на подкомпонентах родительского компонента, когда вызывается родительский метод paintComponent?

1 Ответ

1 голос
/ 10 января 2011

На самом деле лучше всего, чтобы классы, которые на самом деле занимались рисованием, переопределяли свой собственный метод paintComponent (). Позвольте AWT беспокоиться о графических контекстах.

...