1

我目前正在开发一个 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 的方法吗?我是否应该将组件的自定义初始化放在不同的区域,以便可以公开访问它们?

4

2 回答 2

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);
            // ...
于 2011-08-07T08:03:26.437 回答
1

可能存在问题或缺乏绘画,因为您可能将ATW 组件与 Swing JComponet 混合在一起,

如果 OpenGL 没有什么特别之处,则寻找JPanel而不是 AWT Canvas,并且Swing中的所有喘气都将一切重定向到JLabel

请阅读LayoutManagers如何避免setBounds(int, int, int, int);

于 2011-08-07T08:08:58.807 回答