gpt4 book ai didi

java - 在带有监听器的类之间传递变化的变量值

转载 作者:行者123 更新时间:2023-12-01 13:46:51 27 4
gpt4 key购买 nike

按照您的建议,我重写了我的问题。这是我的问题。我有框架,添加了 2 个面板。在第一个面板中,我创建一个 Generator目的。上课Generator我有对象和计时器的列表,它正在调用函数 addItem()正在将新对象添加到我的列表中。第二个面板(在框架中创建)需要打印我的数组中包含的对象列表。如果这些阵列发生变化,则该面板需要自动重新修复。如果看起来太困惑,请查看代码片段

使用 JFRAME 进行类

public class MainFrame extends JFrame{
private MapaSwiata mapa;
private MyPanel myPanel;

public MainFrame(){
//....
JPanel panel = new JPanel(new BorderLayout());
this.getContentPane().add(panel);

mapa = new MapaSwiata();
myPanel = new MyPanel();

panel.add(mapa,BorderLayout.CENTER);
panel.add(menu,BorderLayout.EAST);
//...
}

在 JFrame 类中创建第一个面板的 CLASS

public class MapaSwiata extends JPanel{

Generator gs;

public MapaSwiata(){
//...

gs = new Generator(this);

//...
}
}

CLASS 生成器(带有需要观察变化的 ArrayList)

public class Generator{

ArrayList<Object> sampleArray;

public Generator(JPanel p){
this.s = new ArrayList<Samolot>();
this.p = p;
generatorTimer = new Timer(40, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
addItem();
p.repaint();
}
});
generatorTimer.start();
}
public addItem(){
//....
}
}

最后一个类 CLASS MyPanel - 当我的 ArrayList 更改时需要重新绘制的面板

public class MyPanel extends JPanel{
JLabel label1;
public MyPanel(){

// to do:
// print a ArrayList<Object> sampleArray here in JLabels
// if sampleArray has been changed - my panel repaints itself
}
}

所以我的问题是:1.从我的类(class)传递sampleArray的最佳方式是什么Generator到此面板进行打印2. 在何处/如何/放置什么监听器,让他通知我的最后一个类有关 MapaSwiata 中创建的对象的更改

最佳答案

AWT 和 Swing 使用事件来处理该问题。 ClassA 中应该有一个允许注册事件监听器的方法。每次在 ClassA 实例中修改列表时,都应修改注册的监听器。

因此,ClassB 应该向 ClassA 实例注册一个监听器,并且该监听器应该通过从 ClassA 实例获取修改后的列表来更新面板。

就像您向 JButton 注册 ActionListener 一样,每次单击此 JButton 时都会通知其所有监听器。

阅读http://docs.oracle.com/javase/tutorial/uiswing/events/index.html

关于java - 在带有监听器的类之间传递变化的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20303240/

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