按下按钮后如何制作程序返回ID?

时间:2015-05-17 15:22:24

标签: java button actionlistener

  

此程序返回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

2 个答案:

答案 0 :(得分:0)

您无法从ActionListener返回任何内容,因为其方法actionPerformed(...)被定义为返回void,没有任何内容。但幸运的是,你不需要。这是一个Swing GUI,在ActionListener内部,通过调用myLabel.setText(...)在JLabel中显示ID,或将其显示在需要显示的其他位置。或者,如果您不想显示它,请拨打某个班级setId(...)方法。

请注意,对此问题的真正规范回答是使用MVC或模型 - 视图 - 控件类型设计模式,并在ActionListener(控件的一部分)中,将模型的id字段设置为在数据库中找到的值。如果模型的状态发生变化,GUI应该具有附加到模型的监听器,该监听器将更新GUI的状态(它显示的数据)。但对于你的简单程序,这可能会有点过度杀戮。

其他方面的建议:

  • 您的代码显示了静态修饰符的显着过度使用,这样做可能会使您难以扩展或增强您的程序,或使其易于与其他类一起使用。
  • 您的代码不遵循Java命名规则,您将需要学习并使用Java naming conventions。变量名都应以较低的字母开头,而类名以大写字母开头。了解并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他代码。
  • 虽然null布局和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的值都不是""。