此程序返回0,需要停止/暂停程序,按下按钮然后返回ID。
y
的ActionListener
static int ID=0;
static String log="";
static String pass="";
static SessionFactory factory;
public static int enterStudent(JPanel panel){
panel.setLayout(null);
JLabel jLabel=new JLabel("Login");
panel.add(jLabel);
jLabel.setBounds(10,10,100,30);
JLabel jLabel1=new JLabel("Password");
panel.add(jLabel1);
jLabel1.setBounds(110,10,100,30);
final JTextArea textArea=new JTextArea();
textArea.setBounds(10,50,100,50);
panel.add(textArea);
final JTextArea textArea2=new JTextArea();
textArea2.setBounds(110,50,100,50);
panel.add(textArea2);
JButton enterButton=new JButton("Enter");
enterButton.setBounds(10,100,200,50);
panel.add(enterButton);
try {
factory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Failed to create sessionFactory object." + ex);
throw new ExceptionInInitializerError(ex);
}
这是LogIn的功能,检查登录并传入DATABASE。需要学生的返回ID,但程序返回0
答案 0 :(得分:0)
您无法从ActionListener返回任何内容,因为其方法actionPerformed(...)
被定义为返回void
,没有任何内容。但幸运的是,你不需要。这是一个Swing GUI,在ActionListener内部,通过调用myLabel.setText(...)
在JLabel中显示ID,或将其显示在需要显示的其他位置。或者,如果您不想显示它,请拨打某个班级setId(...)
方法。
请注意,对此问题的真正规范回答是使用MVC或模型 - 视图 - 控件类型设计模式,并在ActionListener(控件的一部分)中,将模型的id字段设置为在数据库中找到的值。如果模型的状态发生变化,GUI应该具有附加到模型的监听器,该监听器将更新GUI的状态(它显示的数据)。但对于你的简单程序,这可能会有点过度杀戮。
其他方面的建议:
setBounds()
似乎是Swing新手,比如创建复杂GUI的最简单和最好的方法,但是你创建的Swing GUI会越多,你会遇到更严重的困难使用它们时当GUI调整大小时,他们不会调整组件的大小,他们是增强或维护的皇室女巫,当他们放置在滚动窗格中时,他们完全失败,当他们在所有平台或屏幕分辨率不同时看起来很糟糕原来的。编辑:我现在看到你试图通过JButton的ActionListener从enterStudent方法返回一个int。这不会像写的那样工作,因为您在ActionListener完成之前返回了id字段。解决方案包括使用某种类型的回调方法,可以将其传递给您的enterStudent方法参数,或者如果您使用模式对话框(如JOptionPane可用)。否则,基于复杂性的增加,是的,你最好使用M-V-C结构,它本身是基于使用听众(回调)。
答案 1 :(得分:0)
这意味着程序控制没有到达此块,因此您的ID将获得默认定义值0。
if((student.getLogin().equals(log))&&(student.getPassword().equals(pass))){
ID=student.getId();//this should be returned
JOptionPane.showMessageDialog(null,"return="+ID);
break;
}
这里if条件没有变为true,这意味着getLogin()和getPassword的值都不是""。