gpt4 book ai didi

java - 无需声明新实例即可获取方法

转载 作者:行者123 更新时间:2023-12-01 14:02:59 26 4
gpt4 key购买 nike

如何从另一个类上声明的已声明实例获取方法?

成长类

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、单例模式......但到目前为止,这个想法还难以捉摸。

最佳答案

您不想在按钮面板中使用 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;
}
...
}

关于java - 无需声明新实例即可获取方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19195769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com