2016-07-06 65 views
0

我希望从其他类获得初始化对象,而无需创建新对象或使用静态对象。那可能吗 ?在不使用静态的情况下获取初始化对象

我尽量让上飞的例子不知道如果它的工作原理:

package.display  
public class Display extends JFrame{  
    public Display(){ 
     initUI(); 
    } 
    public void initUI(){ 
     // initialize panel1 
     Panel1 panel1 = new Panel1(); 
     // setting window adding panel1 
     this.setSize(400,400); 
     this.add(panel1); 
     this.setVisible(true); 
    } 
    public static void main(String[] args){ 
     new Display(); 
    } 
} 
package.panle1 
public class Panel1 extends JPanel{ 
    Canvas canvas; 
    public Display(){ 
     initUI(); 
    } 
    public void initUI(){ 
     // initialize canvas and panel2 
     canvas = new Canvas(); 
     canvas.setSize(new Dimension(200, 200); 
     Panel2 panel2 = new Panel2(); 
     // adding canvas and panel2 
     this.add(canvas, BorderLayout.North); 
     this.add(panle2, BorderLayout.South); 
    } 
    public Canvas getCanvas(){ 
     return canvas; 
    } 
} 
package.panle2 
public class Panel2 extends JPanel{  
    public Display(){ 
     initUI(); 
    } 
    public void initUI(){ 
     // just 1 button 
     JButton btn1 = new JButton(); 
     btn1.addActionListener(new ActionListener() { 
      // create new JPanel and center on canvas 
      public void actionPerformed(ActionEvent arg0){ 
       JPanel canvasPanel = new JPanel(); 
       canvasPanel.setSize(100,100); 
       canvasPanel.setLocationRelativeTo(
       // and here is my PROBLEM 
       // how i get this panel1 canvas object without creating new ? 
       // getter getCanvas() dont work with existing object instance 
       // i want exactly the object which is created when its called 
       // from display and not the way i have to make new Panel1 
     }); 
     this.add(btn1); 
    } 
} 

(我的问题是在代码中最后一部分描述)

我所知道的唯一的解决方法是静态的,并且工作正常。单词 静态是非常好的,我会使用它遍布整个地方,因为它非常方便 访问所有。 有了我不知道的反思。我只看到了一个例子,你必须创建一个对象的新实例,并且我想要。

不久,我想要去可能是3D编程,并从OpenGL开始。在那里,我读到你必须随身携带物品,并且不能像lwgl那样使用static这个词。

这就是为什么我问这个问题,看看我有哪些可能性来解决这样的问题。我希望任何人都可以帮助和thx。

+1

通行证它到'''Panel2'''构造函数; '''Panel2 panel2 = new Panel2(this);''' –

回答

0

另一种方式是创建Panel1的final实例,所以你就可以随时随地访问该对象的getCanvas()方法类,甚至里面的内部类的:

public class Panel2 extends JPanel{  
    final Panel1 panel1=new Panel1(); 
    public Display(){ 
     initUI(); 
    } 
    public void initUI(){ 
     // just 1 button 
     JButton btn1 = new JButton(); 
     btn1.addActionListener(new ActionListener() { 
      // create new JPanel and center on canvas 
      public void actionPerformed(ActionEvent arg0){ 
       JPanel canvasPanel = new JPanel(); 
       canvasPanel.setSize(100,100); 
       canvasPanel.setLocationRelativeTo(
       // and here you have access to the canvas of panel1 
     }); 
     this.add(btn1); 
    } 
} 
+0

对不起,但我认为final也不适用于我的问题。 – medialcore

+0

对不起,但我认为最后也不适合我的问题。 OFC。我可以访问getCanvas(),但我也可以访问创建一个普通的对象。但这正是问题所在。因为我想从 - > Display(新Panel1) - > Panel1(新Canvas和Panel2) - >访问已经创建的对象,然后从Panel2访问由Panel1提供的Canvas,而不使用关键字“new”再次因为我做了一个新的对象。 – medialcore

相关问题