Java 如何连接多个类?
我是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
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
控制器
未实现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”);}
,就可以了。尽管如此,我们还是要学习并坚持这些原则:-)