2013-10-05 64 views
0

如何从已声明的另一个类的已声明实例中获取方法的想法是什么?在不声明新实例的情况下获取方法

成长类

public class Grow { 

public static void main(String [] args) { 
    JFrame frame = new JFrame(); 
    final GrowPanel growPanel = new GrowPanel(); 
    ButtonPanel btnPanel = new ButtonPanel(); 
    frame.add(growPanel); 
    frame.add(btnPanel, BorderLayout.SOUTH); 

    frame.setSize(400, 300); 
    frame.setVisible(true); 
} 

}

ButtonPanel类

public class ButtonPanel extends JPanel implements ActionListener{ 

JButton btn; 

public ButtonPanel() { 
    btn = new JButton("Pause"); 
    add(btn); 
    btn.addActionListener(this); 
} 

public void actionPerformed(ActionEvent e){ 
    if(e.getActionCommand().equals("Pause")){ 
     System.out.println("RESUME"); 
     //growPanel.pause(); 
     btn.setText("Resume"); 
    } else { 
     System.out.println("PAUSE"); 
     // growPanel.start(); 
     btn.setText("Pause"); 
    } 
} 

}

GrowPanel类

class GrowPanel extends JComponent { 
private int x; 
private int y; 
private Timer timer; 
ButtonPanel b; 

public GrowPanel() { 
    x = 10; 
    y = 10; 
    startPaiting(); 
} 

public void startPaiting() { 
    timer = new Timer(); 
    timer.schedule(new TimerTask(){ 
     public void run(){ 
       changeState(); 
       repaint();  
     } 
    },0, 100); 
} 

public void pause(){ 
    timer.cancel(); 
    startPaiting(); 
} 

public void start(){ 
    timer.cancel(); 
    x = 10; 
    y = 10; 
    startPaiting(); 
} 

public void paintComponent(Graphics g){ 
    g.fillOval(x, y, 10, 10); 
} 
private void changeState(){ 
    x+=10; 
    if(x >= 400) { 
     y+=10; 
     x = 0; 
    } 
    if(y >= 300){ 
     y = 10; 
    } 
} 

}

我已经在Grow中声明了一个GrowPanel的新实例。我只是不知道如何从ButtonPanel获取GrowPanel的方法,而无需在ButtonPanel中声明一个新的GrowPanel实例。这个想法甚至可能吗?到目前为止,我已经给出了一些可能有用的主题:Setter/getters,Singleton Pattern ......但迄今为止,这个想法一直难以捉摸。

+0

您是否尝试了反射? –

回答

1

您不想在按钮面板中使用GrowPanel的新实例。您想要使用与主框架使用的实例相同的实例。所以,只需将它传递给按钮面板:

ButtonPanel btnPanel = new ButtonPanel(growPanel); 

... 

public class ButtonPanel extends JPanel implements ActionListener{ 

    private JButton btn; 
    private GrowPanel growPanel; 

    public ButtonPanel(GrowPanel growPanel) { 
     this.growPanel = growPanel; 
    } 
    ... 
} 
+0

感谢您分享这个想法。它在程序上工作。 – Rapharlo

相关问题