只是一个关于访问另一个类中的方法的快速问题。 我知道这听起来很简单,但我看不到它可以为我解答..所以这就是它。
这是一个类..(只留下相关的位,因为大多数其他东西只是格式化和传递值。)
public class ContactManager extends JFrame{
public void getData()throws FileNotFoundException{
...
...
private class thehandler implements ActionListener {
public void actionPerformed(ActionEvent event) {
if (event.getSource() == viewButton && selectedIndex != -1){
ViewContact view = new ViewContact();
view.pack();
view.setVisible(true);
public class ViewContact extends JFrame {
...
...
private class viewhandler implements ActionListener {
public void actionPerformed(ActionEvent event){
if (event.getSource() == updateButton){
getData(); //this method i want to use thats in the contact manager window is what im having issues with.
}
我知道访问另一个类中的方法的语法是错误的我只想表明我想要做的事情。我无法创建联系人管理器类的另一个实例,因为我已经在使用它..:至少我认为这是问题所在。 我希望我留下了足够的相关信息,并提前感谢你们的帮助。
答案 0 :(得分:2)
您问题的简短回答是,您可以将ContactManager
的相应实例传递给ViewManager
,并根据需要致电getData()
:
class ViewManager extends JFrame {
private ContactManager cm;
public ViewManager(ContactManager cm) {
this.cm = cm;
}
private class Handler implements ActionListener {
public void actionPerformed(ActionEvent e) {
cm.getData();
}
}
}
更长的答案是,将业务逻辑与视图逻辑分离并将getData
方法放入业务层类可能更好:
class DataSource {
public Data getData();
}
class ContactManager extends JFrame {
private DataSource dataSource;
public ContactManager(DataSource dataSource) {
...
}
}
class ViewContact extends JFrame {
private DataSource dataSource;
public ViewContact(DataSource dataSource) {
...
}
}
这解耦了负责从负责显示数据的类中获取/管理数据的类。这意味着您可以在不影响数据存储方式的情况下更改视图,也可以更改数据的存储方式而不会影响视图。
答案 1 :(得分:1)
为什么不为ViewContact()创建一个接受对ContactManager实例的引用的构造函数?例如:
ViewContact myContact = ViewContact (this);
答案 2 :(得分:-1)
您可以拨打数据()!
您也可以创建另一个ContactManager的类实例。
您还可以使用以下方法创建ViewContact实例:
ContactManager m = new ContactManager();
JFrame contact = m.new ViewContact();
您甚至可以使用此实例处理程序:
ContactManager manager = new ContactManager();
Object b = null;
for (Class<?> clazz : ContactManager.class.getDeclaredClasses()) {
if (clazz.getSimpleName().equals("thehandler")){
for (Constructor<?> constructor : clazz.getDeclaredConstructors()) {
constructor.setAccessible(true);
b=constructor.newInstance(manager);
break;
}
break;
}
}