Java jpanel之间的通信
首先,我是Java新手,所以请温柔一点 我有一个JFrame,它有两个“JPanel”,其中一个是单独的类(我扩展了JPanel)。理想情况下,我希望“dispatch and event”或通知JFrame上的另一个JPanel对象 我在自定义JPanel类中有一个JButtons数组,我想在其中添加一个事件侦听器。单击jb按钮后,我想在另一个JPanel上更改一些内容 我真的不知道如何做到这一点,所以我将事件处理程序移动到JFrame类中,并尝试执行以下操作:Java jpanel之间的通信,java,swing,jframe,jpanel,actionlistener,Java,Swing,Jframe,Jpanel,Actionlistener,首先,我是Java新手,所以请温柔一点 我有一个JFrame,它有两个“JPanel”,其中一个是单独的类(我扩展了JPanel)。理想情况下,我希望“dispatch and event”或通知JFrame上的另一个JPanel对象 我在自定义JPanel类中有一个JButtons数组,我想在其中添加一个事件侦听器。单击jb按钮后,我想在另一个JPanel上更改一些内容 我真的不知道如何做到这一点,所以我将事件处理程序移动到JFrame类中,并尝试执行以下操作: panel.buttonArr
panel.buttonArray[i][j].addActionListener(this);
然而,这样做根本不起作用。令人烦恼的是,Eclipse也没有抱怨
关于如何做到这一点,有什么建议吗
这是可怕的解释,对不起。请不要从面板而是从对象的角度来考虑这一点。只要一个对象,比如说它的名字是object77,有一个对另一个对象的引用,称它为object42,object77就可以调用object42上的方法
object77.methodInObject42();
panel77.methodInPanel42();
至于事件处理程序,那么
buttonOnPanelXX.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
panel77.methodInPanel42();
}});
或者更好
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
panel77.methodInPanel42();
}});
}});
好的,我们给你的物品命名。你的JFrame=frame。您的自定义JPanel=mypanel。您的另一个JPanel=panel2。您到底想对panel2做什么?
扩展了JPanel
为什么,重写了哪些方法?您的类实现了ActionsListener
?你实现了actionPerformed
方法了吗?@andrewhompson它没有覆盖任何方法,我只是把它作为一种方法来把事情联系在一起。也就是说,我把它命名为Board,因为它是一个“棋盘”。如果代码编译,“Eclipse”不会“抱怨”。仅仅因为它可以编译并不意味着它会正常运行(直到你的bug被修复),所以最好不要对此感到恼火,否则你会非常恼火。正如查克·弗里卡诺所解释的那样,你可能对推荐信有问题。另外,考虑使用observer设计模式,以便一个对象在发生更改时收到另一个对象中更改的通知。所有Swing侦听器都基于此。我真的不确定如何实现此功能。子对象如何在其父对象的子对象中调用方法?(我想是这样的)也许我应该画一张图表,哈哈。编辑:结果并不像预期的那样。这就是我的意思,按钮在panel1中被取消,需要修改panel2@Jonathan-让jframe调用panel1方法并传递panel2。(小组1.识别(小组2);)我算出了,谢谢!:)用了一种稍微不同的方式,但你给了我正确的指示(哈!)。必须了解java中没有指针