设置Button命令javafx

时间:2017-12-12 19:31:19

标签: java swing javafx

我一直在使用JFrame来学习图形并测试我的代码,因为我知道它更好。现在我想更新到Javafx。我有这个JListener类来处理我的JFrame的所有按钮。是否可以在Javafx中使用此类?如果是这样的话?

例如,使用JFrame我可以使用Button.setActionCommand(" command");当按下按钮时它将使用actionListener运行它,我可以用javafx做同样的事情吗?

package src.com.Kingdom;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Scanner;
import java.net.*;

public class JListener implements ActionListener
 {

private boolean registered = false;
registerClient register;
loginClient login;
static GUIs gui = new GUIs(); 



@Override
public void actionPerformed(ActionEvent e) {


    switch(e.getActionCommand()) {

        case("login"):
            login = new loginClient(gui.getUsername(), gui.getPassword());
            System.out.println("Login");
            break;
        case("exit"):
            System.out.println("exit");
            break;
        case("register"):
            System.out.println("register");
            gui.getFrame().dispose();
            gui.createRegisterGui();
            break;
        case("registerperson"):
            if(gui.checkRegister()) {
            if(hasInternet()) {
                if(!(registered)) {
                    registered = true;
                    try {
                        register =
                                new registerClient(gui.getUsername(), gui.getPassword(), gui.getEmail(), gui.getAge());
                    } catch(Exception ex) {
                        GUIs.showError(ex.getMessage());
                    }
                    if(!(register.isRegistered())) {
                    gui.createLoginGui();
                }
                    new Timer().schedule(new TimerTask() {
                        public void run() {
                            registered = false;
                        }
                    },1000*1);
                } 
            } else {
                GUIs.showError("No Internet!  Please connect to internet to connect!");
            }
            } else {

                GUIs.showError("Problem with registration format");
             }
            break;

    }

}
}

1 个答案:

答案 0 :(得分:3)

在技术上可以集成JavaFX和Swing。 Oracle provide a tutorial on this。除非你真的需要(在这种情况下你可能不这样做),我不建议将两者集成。请注意,可能的集成级别只是将Swing组件嵌入到JavaFX节点中(反之亦然)。您不能直接使用Swing侦听器在按下JavaFX按钮时执行操作。

相反,我建议您将代码本机编写到单个库中,JavaFX或Swing。

您的示例代码。用于处理按钮操作的JavaFX等效项是:

  

如何为action命令设置String?这可能吗?或者我必须采用不同的方式吗?

你不会,这没有必要。

我不编码Swing,所以我不熟悉Swing ActionEvent。通过查看代码,您的监听器似乎提供了一个单点来处理源自不同源的多个动作事件,然后对它们进行操作。

对于JavaFX,只需为每个源定义单独的事件处理程序而不是使用开关,然后您不需要将字符串传递给action命令,因为很清楚根据上下文采取什么操作。

例如:

loginButton.setOnAction(event -> { /** handle login **/});
exitButton.setOnAction(event -> { /** handle exit **/});

如果有多种方法可以触发操作,例如,菜单项和按钮都可以触发退出,那么您可以为操作处理程序定义一个变量,并为每个实例重用该变量,例如: / p>

EventHandler<ActionEvent> exitHandler = event -> { /** handle exit **/ };
exitButton.setOnAction(exitHandler);
exitMenuItem.setOnAction(exitHandler);