Java 如何连接多个类?

Java 如何连接多个类?,java,swing,Java,Swing,我是java的新手 package assigment; import java.awt.*; import java.sql.*; import javax.swing.*; public class view extends JFrame { public static void main(String[] args) { new view(); } public view(){ JFrame f = new JFrame("W

我是java的新手

package assigment;

import java.awt.*;
import java.sql.*;
import javax.swing.*;

public class view extends JFrame {

    public static void main(String[] args) {
        new view();
    }

    public view(){
        JFrame f = new JFrame("WELCOME");
        f.setSize(400, 300);
        f.setVisible(true);
        f.setLocationRelativeTo(null);

        controller cl = new controller();

        JButton btnCompany = new JButton ("COMPANY");
        f.add(btnCompany);
        f.setLayout(null);
        btnCompany.setBounds(50, 50, 100, 50);
        btnCompany.addActionListener (cl);
    }
}
控制器类

package assigment;

import java.awt.event.*;
public class controller {

    public static void actioncompany(ActionEvent a,view view) {
        if (a.getSource() == view.btnCompany) {
            System.out.print ("test");
        }
    }
}
问题:

  • 无法使用
    控制器

  • 无法访问
    controller
    类中的
    btnCompany


  • 该代码甚至不应该编译,因为没有字段,
    view.btnCompany
    。btnCompany变量是构造函数的局部变量,因此在其他地方不可见。另外,正如MadProgrammer所指出的,您的控制器类(重新命名为controller)没有实现ActionListener,因此不能用作ActionListener

    我对您的代码有其他问题:

    • 不要使用空布局和绝对定位
    • 务必遵守Java命名规则,包括以大写字母开头的类和接口名称,以便其他人更容易理解您的代码
    • 是的,将控件与视图分开
    • 大多数字段都应该是私有的,因此view.BtnCompany不应该可见,即使该字段存在
    • ActionListener必须实现ActionListener接口或扩展实现该接口的类,如AbstractAction

    该代码甚至不应该编译,因为没有一个字段,
    view.btnCompany
    。btnCompany变量是构造函数的局部变量,因此在其他地方不可见。另外,正如MadProgrammer所指出的,您的控制器类(重新命名为controller)没有实现ActionListener,因此不能用作ActionListener

    我对您的代码有其他问题:

    • 不要使用空布局和绝对定位
    • 务必遵守Java命名规则,包括以大写字母开头的类和接口名称,以便其他人更容易理解您的代码
    • 是的,将控件与视图分开
    • 大多数字段都应该是私有的,因此view.BtnCompany不应该可见,即使该字段存在
    • ActionListener必须实现ActionListener接口或扩展实现该接口的类,如AbstractAction

    已经这样做了,但btnCompany.addActionListener(cl)将error@YuukiRito:已经做了什么?什么错误?请提供更多信息,以便我们能够帮助您。@YuukiRito
    控制器
    未实现
    ActionListener
    ,也未从
    ActionListener
    界面提供
    actionPerformed
    的实现,因此,您不能将其用作
    ActionListener
    btnCompany
    。更好的方法是使用或设置
    JButtons
    actionCommand
    属性,并在
    ActionListener
    中检查该属性。有关更多详细信息,请参阅类AbstractButton中的addActionListener方法无法应用于给定的types@YuukiRito:如上文所述,您必须将ActionListener传递到
    addActionListener(…)
    方法中,并且您的类不实现ActionListener接口。您需要让它实现这个接口,然后给它一个适当的
    public void actionPerformed(ActionEvent e)
    方法。已经这样做了,但是btnCompany.addActionListener(cl)将error@YuukiRito:已经做了什么?什么错误?请提供更多信息,以便我们能够帮助您。@YuukiRito
    控制器
    未实现
    ActionListener
    ,也未从
    ActionListener
    界面提供
    actionPerformed
    的实现,因此,您不能将其用作
    ActionListener
    btnCompany
    。更好的方法是使用或设置
    JButtons
    actionCommand
    属性,并在
    ActionListener
    中检查该属性。有关更多详细信息,请参阅类AbstractButton中的addActionListener方法无法应用于给定的types@YuukiRito:如上文所述,您必须将ActionListener传递到
    addActionListener(…)
    方法中,并且您的类不实现ActionListener接口。你需要让它实现这个接口,然后给它一个合适的
    public void actionPerformed(ActionEvent e)
    方法。在
    视图
    构造函数中初始化
    JButton
    后,只需使用
    btnCompany.setActionCommand(“COMPANY”)
    。现在在控制器内部使用
    String命令=(String)e.getActionCommand();如果(command.equals(“COMPANY”){System.out.println(“Test”);}
    ,就可以了。尽管要了解并坚持这些原则:-)在初始化
    视图
    构造函数中的
    JButton
    后,只需使用
    btnCompany.setActionCommand(“公司”)
    。现在在控制器内部使用
    String命令=(String)e.getActionCommand();如果(command.equals(“COMPANY”){System.out.println(“Test”);}
    ,就可以了。尽管如此,我们还是要学习并坚持这些原则:-)