我目前正在研究Swing Applet,并且在其他类函数中引用我的自定义AWT Canvas组件(非常简单的扩展类)时遇到问题,例如通常使用Netbean(7.0)创建的任何其他组件(即按钮)的设计师。
我在这里添加了自定义画布元素,我确信这将是合适的位置(特别是在所有其他生成的组件刚刚在同一区域中创建之后)
public void init() {
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
CustomCanvas myCan = new CustomCanvas();
myCan.setBounds(100, 100, 200, 200);
getContentPane().add(myCan);
...
但是,与生成的组件不同,我无法通过名称访问它们,也无法通过其他方式(this.myCan)访问它们。我已经设置了一个示例函数,它将处理Swing表单上的(生成的)按钮来操作以前实例化的myCan组件:
private void btnManipCanvasActionPerformed(java.awt.event.ActionEvent evt) {
//Essentially Was wanting to call something here such as myCan.getGraphics().setRect...
}
你知道在那里访问myCan的方法吗?我是否应该将组件的自定义初始化放在不同的区域,以便可以公开访问它们?
答案 0 :(得分:1)
只需将画布作为实例变量,因为(我猜)Netbeans设计师创建的所有其他组件:
private CustomCanvas myCan;
public void init() {
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
myCan = new CustomCanvas();
myCan.setBounds(100, 100, 200, 200);
getContentPane().add(myCan);
// ...
答案 1 :(得分:1)
可能存在问题或缺少绘画,因为您可能将ATW Components与Swing JComponets混合,
如果没有来自OpenGL的特殊内容,那么请寻找JPanel而不是AWT Canvas,并且Swing中的所有气喘将每个标记重定向到JLabel
请阅读LayoutManagers如何避免setBounds(int, int, int, int);