在另一个类函数中访问动态组件(即新标签)?

时间:2011-08-07 07:54:39

标签: java swing japplet

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

2 个答案:

答案 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);