我有一个jrame,我在上添加一些Jcomponent对象。每个Jcomponent都有一个我使用JCOMPONENT.ADD(组件)添加的容器列表。

现在,在我的主要Jcomponent类中,称为MyComponent,我覆盖了受保护的方法PaintComponent,我可以在其中绘制物品,这很好。

但是我不想在主Jcomponent上绘画,我只想在添加到主Jcomponent的容器上绘画。

因此,在PaintComponent中的MyComponent中,我会执行以下操作。

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();将图形对象从我的一个容器中添加到“ myComponents”列表中,当然还有使用JCOMPONENTS添加方法添加到主组件列表中。通过调用设置可见(true),将容器设置为可见;方法。

但是什么都没有发生。屏幕为空。当我用g替换page_g时,然后绘画起作用,因为它在我的jcomponent(mycomponent)上绘画,但是我想在这种情况下是我的组件的孩子的容器上绘画。

我经常听到“永远不要使用GetGraphics()”。但是,当父母paintComponent方法被调用时,只有如何绘制父组件的子组件?

有帮助吗?

解决方案

真正的最好的选择是让实际上进行自定义绘画的类覆盖自己的PaintComponent()方法。让AWT担心图形上下文。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top