gpt4 book ai didi

java - 如何控制使用类加载器加载的 Canvas ?

转载 作者:行者123 更新时间:2023-12-02 07:39:33 24 4
gpt4 key购买 nike

假设我使用 UrlClassLoader 从网站加载小程序并将其作为组件附加到框架。我怎样才能获得对 Canvas 的控制,以便我可以自己在上面绘图?据我所知,这方面的信息并不多。有人提到了一些关于 XBOOTING 的内容,但我不知道那是什么,也找不到任何相关信息。

最佳答案

问题在于“每个小程序都是不同的”。 That applet例如,其中没有 Canvas,而是直接绘制到小程序表面。一旦您有了小程序的实例,您就可以直接绘制该实例,但是当用户选择按钮时它就会被覆盖。

import java.applet.Applet;
import java.awt.*;
import java.net.*;

import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class GrabThatCanvas {

GrabThatCanvas() {
try {
String string = "http://mainline.brynmawr.edu/Courses/cs110/spring2002/Applets/Smiley/";
URL[] urls = {
new URL(string)
};
URLClassLoader urlcl = new URLClassLoader(urls);
Class<?> clss = urlcl.loadClass("Smiley");
Object o = clss.newInstance();
Applet applet = (Applet)o;
applet.init();
applet.start();
applet.setPreferredSize(new Dimension(200,200));

Canvas canvas = findFirstCanvas(applet);
if (canvas!=null) {
System.out.println("We have the Canvas!");
} else {
System.out.println("No Canvas found!");
}

JOptionPane.showMessageDialog(null, applet);
} catch (Exception e) {
e.printStackTrace();
}
}

/* Very naive implementation that assumes the canvas is added
* directly to the applet. */
public Canvas findFirstCanvas(Container parent) {
Canvas canvas = null;
Component[] components = parent.getComponents();
for (Component c : components) {
System.out.println(c);
if (c instanceof Canvas) {
canvas = (Canvas)c;
break;
}
}
return canvas;
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new GrabThatCanvas();
}
});
}
}

输出

java.awt.Button[button0,0,0,0x0,invalid,label=Smile]
java.awt.Button[button1,0,0,0x0,invalid,label=Sad]
No Canvas found!

当然,您可以将小程序放入 Swing GUI 中,考虑 Swing 和 AWT 的奇怪组合,并使用分层 Pane 在整个小程序的“顶部”进行绘制。但这会带来新的问题。

关于java - 如何控制使用类加载器加载的 Canvas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11771932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com