그래픽 인터페이스를 구현하여 작동하는 일반 그래픽 내보내기 도구를 만들고 다양한 방법에 대한 호출을 인터셉트하고 해석합니다. 그러나 하나의 구성 요소에 대해이 작업을 성공적으로 수행 할 수 있지만 다른 구성 요소가 포함 된 구성 요소에서 사용할 경우 Graphics 클래스가 교체됩니다. 이상하게도 이것은 Windows와 Linux에서만 발생합니다. OSX에서 잘 작동합니다.어떻게 성공적으로 그래픽을 Java로 확장 할 수 있습니까?
누구나 내가 모든 하위 구성 요소로 전달되는 내 원래 Graphics 클래스인지 어떻게 확인할 수 있습니까?
근본적인 문제를 보여주는 짧은 스크립트가 있습니다. 명시 적으로 MyGraphics의 인스턴스를 사용하여 페인트를 호출 할 때 JPanel에 MyGraphics가 표시되지 않습니다 (단지 sun.java2d.SunGraphics2D). 내 Windows 시스템에서
import java.awt.*;
import java.awt.image.*;
import java.text.AttributedCharacterIterator;
import javax.swing.*;
public class GraphicsTest {
public static void main(String[] args) {
new GraphicsTest();
}
public GraphicsTest() {
JFrame frame = new JFrame();
frame.getContentPane().add(new MyPanel());
frame.setSize(500,500);
frame.setVisible(true);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {}
System.out.println("Using my graphics - expect to see 'MyGraphics' next");
frame.paint(new MyGraphics());
}
class MyPanel extends JPanel {
public void paint (Graphics g) {
super.paint(g);
System.out.println("Graphics is "+g);
g.fillRect(10, 10, 20, 20);
}
}
class MyGraphics extends Graphics {
public String toString() {
return "MyGraphics";
}
public Graphics create() {
return this;
}
// I've left out the huge list of abstract methods from the original script
// since they're unchanged from the defaults and don't really matter here.
}
출력은 다음과 같습니다
Graphics is sun.java2d.SunGraphics2D[font=javax.swing.plaf.FontUIResource[family=Dialog,name=Dialog,style=plain,size=12],color=sun.swing.PrintColorUIResource[r=51,g=51,b=51]] Using my graphics - expect to see 'MyGraphics' next Graphics is sun.java2d.SunGraphics2D[font=javax.swing.plaf.FontUIResource[family=Dialog,name=Dialog,style=plain,size=12],color=sun.swing.PrintColorUIResource[r=51,g=51,b=51]]
OSX에서 나는 어떤 기대 것을 얻을 반면 : 그래서
Graphics is sun.java2d.SunGraphics2D[font=apple.laf.CUIAquaFonts$DerivedUIResourceFont[family=LucidaGrande,name=LucidaGrande,style=plain,size=13],color=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0]] Using my graphics - expect to see 'MyGraphics' next Graphics is MyGraphics
나는 것을 확인하기 위해 무엇을 할 수 있는지 모든 경우에 'MyGraphics'가 해당 하위 구성 요소로 전달됩니까?
이 정보를 귀하의 질문에 추가하십시오! 또는 피트의 대답에 댓글을 달아주세요. – guerda