我有一个jrame,我在其上添加了一些JComponent对象。 每个JComponent都有一个我使用JComponent.add(Component)添加的容器列表。
现在在我的主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();将我的一个容器中的Graphics对象添加到MyComponents容器列表中,当然还有使用JComponents add方法的主组件列表。通过调用setVisible(true)将容器设置为可见;方法
但没有任何反应。屏幕是空的。当我用g替换page_g时,绘画工作,因为它在我的JComponent(MyComponent)上绘制,但我想在容器上绘制,在这种情况下是MyComponent的子节点。
我经常听到“从不使用getGraphics()”。但是当父类paintComponent方法被调用时,如何只能绘制父组件的子组件?
答案 0 :(得分:1)
真正最好的办法是让实际进行自定义绘制的类覆盖自己的paintComponent()方法。让AWT担心图形上下文。