代码是根据 存储的闭合曲线的点信息在panel绘出曲线图形
是不是 generalPath() 部分太复杂IE这边没有足够的显存???
因为我试过简单的 generalPath() 生成五角星可以在IE中显示出来
代码主要部分如下:
那位高手帮忙看看 这个问题怎么解决啊???
public class onlyDraw
extends JApplet {
drawPanel = new DrawPanel();
getContentPane(setLayout(new BorderLayout())).add(drawPanel, "Center"); public void paintComponent(Graphics screen) {
repaint();
} class DrawPanel
extends JPanel { DrawPanel() {
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
} public void paintComponent(Graphics screen) {
Graphics2D g2 = (Graphics2D) screen;
bi = (BufferedImage) paintOffScreen(); g2.drawImage(bi, 0, 0, this);
if (CurrentRectangle != null) {
g2.setColor(Color.red);
g2.draw(CurrentRectangle);
}
} private Image paintOffScreen() {
offScreen = (BufferedImage) createImage(getWidth(), getHeight());
Graphics2D g2 = (Graphics2D) offScreen.getGraphics();
g2.setBackground(Color.gray);
g2.setColor(Color.black); GeneralPath coastPath = new GeneralPath(GeneralPath.WIND_NON_ZERO);
int size = groupList.size(); //groupList存储的是绘制点的所需的信息
//lineList 一组闭合曲线的点信息
for (int i = 0; i < size; i++) {
lineList = (ArrayList) groupList.get(i);
pPoint = (Point2D.Double) lineList.get(0);
LoToPh(pPoint, lpFirst);
coastPath.moveTo(lpFirst.x, lpFirst.y); for (int j = 0; j < lineList.size(); j++) {
pPoint = (Point2D.Double) lineList.get(j);
LoToPh(pPoint, lpSecond); //由逻辑经纬度变换为实际相素坐标
coastPath.lineTo(lpSecond.x, lpSecond.y);
}
if (lpFirst.x == lpSecond.x && lpFirst.y == lpSecond.y) {
coastPath.closePath();
}
}
g2.draw(coastPath);
return offScreen;
}
}
是不是 generalPath() 部分太复杂IE这边没有足够的显存???
因为我试过简单的 generalPath() 生成五角星可以在IE中显示出来
代码主要部分如下:
那位高手帮忙看看 这个问题怎么解决啊???
public class onlyDraw
extends JApplet {
drawPanel = new DrawPanel();
getContentPane(setLayout(new BorderLayout())).add(drawPanel, "Center"); public void paintComponent(Graphics screen) {
repaint();
} class DrawPanel
extends JPanel { DrawPanel() {
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
} public void paintComponent(Graphics screen) {
Graphics2D g2 = (Graphics2D) screen;
bi = (BufferedImage) paintOffScreen(); g2.drawImage(bi, 0, 0, this);
if (CurrentRectangle != null) {
g2.setColor(Color.red);
g2.draw(CurrentRectangle);
}
} private Image paintOffScreen() {
offScreen = (BufferedImage) createImage(getWidth(), getHeight());
Graphics2D g2 = (Graphics2D) offScreen.getGraphics();
g2.setBackground(Color.gray);
g2.setColor(Color.black); GeneralPath coastPath = new GeneralPath(GeneralPath.WIND_NON_ZERO);
int size = groupList.size(); //groupList存储的是绘制点的所需的信息
//lineList 一组闭合曲线的点信息
for (int i = 0; i < size; i++) {
lineList = (ArrayList) groupList.get(i);
pPoint = (Point2D.Double) lineList.get(0);
LoToPh(pPoint, lpFirst);
coastPath.moveTo(lpFirst.x, lpFirst.y); for (int j = 0; j < lineList.size(); j++) {
pPoint = (Point2D.Double) lineList.get(j);
LoToPh(pPoint, lpSecond); //由逻辑经纬度变换为实际相素坐标
coastPath.lineTo(lpSecond.x, lpSecond.y);
}
if (lpFirst.x == lpSecond.x && lpFirst.y == lpSecond.y) {
coastPath.closePath();
}
}
g2.draw(coastPath);
return offScreen;
}
}
一般来说用viewer可以看的话IE就不会有问题,出现了你这样的情况有两种可能:
一、你的程序中涉及了调用本地资源,由于Applet本身的安全机制起作用,如果你没有数字签名的话,在IE中无法显示Applet,而用viewer调试则不受限制。
二、如果你的JDK不是经过安装,而是直接拷贝来使用的话,将导致IE不能显示Applet。
IE中可以显示出 applet 而applet的绘图区在绘制 比如像五角星 那样的简单的图形的时候 图像是可以显示出来的
可是 代码改成我要绘制的复杂图形时 绘图区根本看不到任何绘制过的图形包括已经验证过的可以显示出来的五角星 但背景色却可以绘制出来
问题产生的 *******可能的原因*********:
(注意是可能的原因 也许还有其他毛病 或者那位高人 在进一步分析一下)
代码中使用文件访问方式得到数据 applet-viewer 可能和IE 中的applet 显示机制 不同
即 IE 中的applet 如果指定文件 可能 被认为是要访问客户端文件 而不予理睬
但是 如果用url 方式访问 applet 宿主机的文件则可以 此时这台宿主机就是applet刚才所要访问的机器也即是 applet 的宿主机