在Java项目中,当两个文件进行互相调用时出现了函数错误。具体问题出现在`MainFrame.java`文件中,该文件位于`cn.javass.bookmgr`包下,并且导入了`java.awt.BorderLayout`和`java.awt.Event`等相关类。为了确保项目的正常运行,请求提供专业的解决方案,以解决函数调用中的错误。建议从类路径、依赖关系和方法签名等方面入手,进行全面排查和调试。
第一个MainFrame.java文件
package cn.javass.bookmgr;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import cn.javass.bookmgr.user.ui.panels.ListPanel;
import cn.javass.bookmgr.user.ui.panels.LoginPanel;
import cn.javass.bookmgr.util.uiutil.ChangePanel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MainFrame extends JFrame
{
private JPanel contentPane;
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
//添加登录界面
MainFrame frame = new MainFrame();
frame.getContentPane().add(new LoginPanel());
frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public MainFrame()
{
{
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
{
JMenu mnFile = new JMenu("File");
menuBar.add(mnFile);
{
JMenuItem mntmExit = new JMenuItem("Exit");
mnFile.add(mntmExit);
}
{
JMenuItem mntmLogin = new JMenuItem("Login");
mnFile.add(mntmLogin);
}
}
{
JMenu menu = new JMenu("\u7528\u6237\u7BA1\u7406");
menuBar.add(menu);
{
JMenuItem menuItem = new JMenuItem("\u6CE8\u518C\u7528\u6237");
menu.add(menuItem);
}
{
JMenuItem menuItem = new JMenuItem("\u4FEE\u6539\u7528\u6237");
menu.add(menuItem);
}
{
JMenuItem menuItem = new JMenuItem("\u5220\u9664\u7528\u6237");
menu.add(menuItem);
}
{
JMenuItem menuItem = new JMenuItem("\u67E5\u8BE2\u7528\u6237");
menu.add(menuItem);
}
{
JMenuItem menuItem = new JMenuItem("\u7528\u6237\u5217\u8868");
menuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ListPanel lp=new ListPanel();
ChangePanel.changePanel(this, lp);
}
});
menu.add(menuItem);
}
}
{
JMenu menu = new JMenu("\u56FE\u4E66\u7BA1\u7406");
menuBar.add(menu);
{
JMenuItem menuItem = new JMenuItem("\u56FE\u4E66\u5217\u8868");
menu.add(menuItem);
}
{
JMenuItem menuItem = new JMenuItem("\u6DFB\u52A0\u56FE\u4E66");
menu.add(menuItem);
}
{
JMenuItem menuItem = new JMenuItem("\u5220\u9664\u56FE\u4E66");
menu.add(menuItem);
}
{
JMenuItem menuItem = new JMenuItem("\u4FEE\u6539\u56FE\u4E66");
menu.add(menuItem);
}
{
JMenuItem menuItem = new JMenuItem("\u67E5\u8BE2\u56FE\u4E66");
menu.add(menuItem);
}
}
{
JMenu menu = new JMenu("\u8FDB\u8D27\u7BA1\u7406");
menuBar.add(menu);
{
JMenuItem menuItem = new JMenuItem("\u586B\u5199\u8FDB\u8D27\u5355");
menu.add(menuItem);
}
{
JMenuItem menuItem = new JMenuItem("\u67E5\u8BE2\u8FDB\u8D27\u5355");
menu.add(menuItem);
}
}
{
JMenu menu = new JMenu("\u9500\u552E\u7BA1\u7406");
menuBar.add(menu);
{
JMenuItem menuItem = new JMenuItem("\u586B\u5199\u9500\u552E\u5355");
menu.add(menuItem);
}
{
JMenuItem menuItem = new JMenuItem("\u67E5\u8BE2\u9500\u552E\u5355");
menu.add(menuItem);
}
}
{
JMenu menu = new JMenu("\u5E93\u5B58\u7BA1\u7406");
menuBar.add(menu);
{
JMenuItem menuItem = new JMenuItem("\u67E5\u770B\u5E93\u5B58");
menu.add(menuItem);
}
}
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 600, 450);
contentPane = new JPanel();
contentPane.setLayout(new BorderLayout(0, 0));
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
}
}
标有红处的地方有调用错误。
第二个文件ChangePanel.java
package cn.javass.bookmgr.util.uiutil;
import java.awt.event.ActionListener;
import cn.javass.bookmgr.MainFrame;
import cn.javass.bookmgr.user.ui.panels.AddPanel;
import cn.javass.bookmgr.user.ui.panels.ListPanel;
import javax.swing.JPanel;
public class ChangePanel
{ public ChangePanel()
{
}
public static void main(String args[])
{
ChangePanel changepanel=new ChangePanel();
}
public static void changePanel(MainFrame mf,JPanel toPanel)
{
mf.getContentPane().removeAll();
//AddPanel ap=new AddPanel();
//mf.getContentPane().add(ap);
mf.getContentPane().add(toPanel);
mf.getContentPane().validate();
}
}
以上有两个文件 在第一个文件标有红处有错误,在ECLIPSE中出现The method changePanel(MainFrame, JPanel) in the type ChangePanel is not applicable for the arguments (new ActionListener(){}, ListPanel) 这样的错误
请高手给我解决下~~~
3 个解决方案
错误提示已经说的非常清楚了.
在ChangPanel这个类中你定义的changePanel的两个参数是MainFrame和Jpanel类型.
调用的时候你给的两个参数的类型是ActionListener和ListPanel类型.
能不能帮我改下啊,
目的是在MainFrame.java中,
在ChangePanel.changePanel(this, lp);中,this实际上代表的是frame这个对象,但是如果把this改为frame,还是有错误,请帮忙改下 谢谢!!
menuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ListPanel lp=new ListPanel();
ChangePanel.changePanel(this, lp);
}
});
ChangePanel.changePanel(this, lp);
的第一个参数,我想你是想用菜单所在的那个MainFrame吧.
可以用e.getSource()得菜单项,要强转一下,e.getSource().getParent()可以得么菜单,e.getSource().getParent().getParent(),是不是就可以得到MainFrame了呢?