javaFx 从登陆到界面跳转 您所在的位置:网站首页 ajax登录成功跳转页面怎么关闭 javaFx 从登陆到界面跳转

javaFx 从登陆到界面跳转

2024-07-13 00:30| 来源: 网络整理| 查看: 265

闲话少说,直接上图

登陆

写这篇文章呢是因为这是我的第一个javaFX项目,记录一下心得体会。

参考文档:http://www.javafxchina.net/blog/    中文API

1.首先来聊一聊登陆,这里有篇文章相当好:http://blog.csdn.net/nthack5730/article/details/51901593

但我没用该案例,对于我的这个项目,使用上述文章中的方法反而显得啰嗦麻烦。

   1.1)登陆的原理

           点击登陆,打开一个新窗口,关闭当前窗口。

           我这里呢使用的是同一个stage,所以不用关闭登录窗口,主页面会直接覆盖登陆窗口。

代码:

主舞台MainApp.java

@Override public void start(Stage primaryStage) throws Exception { /* * System.setProperty("http.proxyHost", "127.0.0.1"); * System.setProperty("http.proxyPort", "8888"); * System.setProperty("https.proxyHost", "127.0.0.1"); * System.setProperty("https.proxyPort", "8888"); */ stage = primaryStage; stage.setTitle("xxxxxxxxx系统"); stage.getIcons().add(new Image(MainApp.class.getResourceAsStream("/com/cbss/fxmlSource/logo_b.png"))); gotologin(); stage.show(); } 登陆方法

/** * 登录 */ public void gotologin() { try { LoginController login = (LoginController) replaceSceneContent(LoginViewRes); login.setApp(this); } catch (Exception ex) { ex.printStackTrace(); } } /** * 实例化登录窗口 * * @param fxml * @return * @throws Exception */ public Initializable replaceSceneContent(String fxml) throws Exception { FXMLLoader loader = new FXMLLoader(); InputStream in = MainApp.class.getResourceAsStream(fxml); loader.setBuilderFactory(new JavaFXBuilderFactory()); loader.setLocation(getClass().getResource(fxml)); GridPane page; try { this.page = (GridPane) loader.load(in); } finally { in.close(); } Scene scene = new Scene(this.page, 344, 366); stage.setScene(scene); stage.sizeToScene(); initView(this.page); return (Initializable) loader.getController(); 注:initView是自己写的初始化页面方法(获取验证码),此处不做演示.

主页:

/** * 主页 * * @throws Exception */ public void gotomain() { try { MainController main = (MainController) mainSceneContent(mainViewRes); main.setApp(this); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 实例主页窗口 * * @param fxml * @return * @throws Exception */ public Initializable mainSceneContent(String fxml) throws Exception { FXMLLoader loader = new FXMLLoader(); InputStream in = MainApp.class.getResourceAsStream(fxml); loader.setBuilderFactory(new JavaFXBuilderFactory()); loader.setLocation(getClass().getResource(fxml)); BorderPane page; try { page = (BorderPane) loader.load(in); } finally { in.close(); } //全屏 Screen screen = Screen.getPrimary(); Rectangle2D bounds = screen.getVisualBounds(); stage.setX(bounds.getMinX()); stage.setY(bounds.getMinY()); stage.setWidth(bounds.getWidth()); stage.setHeight(bounds.getHeight()); Scene scene = new Scene(page); this.scene = scene; stage.setScene(scene); // stage.sizeToScene(); return (Initializable) loader.getController(); }

用户登录:

/** * 用户登录d * * @param userName * @param password * @param verifyCode * @throws Exception */ public void userLogin(String userName, String password, String verifyCode) throws Exception { if (CheckLogin.checkLogin(userName, password, verifyCode)) { Platform.runLater(new Runnable() { @Override public void run() { // TODO Auto-generated method stub gotomain(); } }); } }

注意此处:若登陆时有一些业务逻辑要处理,此处需要使用线程Platform.runLater,否则程序会进入假死状态

LoginController.java

@FXML private Text actiontarget; @FXML private TextField userNameField; @FXML private PasswordField passwordField; @FXML private TextField verifyCode; @FXML private ImageView verifyImg; private MainApp application; /** * 点击按钮登录 * @param event */ @FXML protected void handleSubmitButtonAction(ActionEvent event) { final String userName = userNameField.getText(); final String password = passwordField.getText(); String verifycode = verifyCode.getText(); if (null == userName || "".equals(userName)) { actiontarget.setText("用户名不能为空"); return; } if (null == password || "".equals(password)) { actiontarget.setText("密码不能为空"); return; } if (null == verifycode || "".equals(verifycode)) { actiontarget.setText("验证码不能为空"); return; } actiontarget.setText(""); Task task = new Task() { @Override public Void call() throws InterruptedException { try { application.userLogin(userName.toString(), password.toString(), verifyCode.toString()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); actiontarget.setText(e.getMessage()); try { application.initView(application.page); } catch (IOException ce) { // TODO Auto-generated catch block actiontarget.setText(ce.getMessage()); } } return null; } }; ProgressBar bar = new ProgressBar(); bar.progressProperty().bind(task.progressProperty()); new Thread(task).start(); //登录时开启一个动画效果(一个旋转的圈圈) ProgressFromForLogin progressFrom = new ProgressFromForLogin(task, application.stage,130,160,"正在登录,请稍后..."); progressFrom.activateProgressBar();}

好了,现在登录成功了,现在我们来看看左侧导航栏,右侧显示内容的页面怎么做吧!

参考案例:http://www.cnblogs.com/itwang/p/3631538.html   源代码丢失

该效果有两种方法,第一种方法采用开启多个窗口的方法(同时new多个fxml),

开启多个窗口:http://blog.csdn.net/nthack5730/article/details/51901593  

此处不再复述,

我用的是第二种方法,采用javaFX 自带的 tabpane

值得注意的是:tabpane和pane不同,它和Button一样是一个控件

首先呢还是先去画出想要的tabpane效果(我用的是screen builder)

MainController.java

有些代码不方便传,看着理解吧

首先,初始化时除了主页的tab

/** * 初始化 */ @Override public void initialize(URL arg0, ResourceBundle arg1) { // TODO Auto-generated method stub tabPaneId.getTabs().remove(1, 3); }

remove方法,含头不含尾。

/** * 跳转到综合查询 * @param event */ @FXML protected void allQuery(ActionEvent event){ int size = tabPaneId.getTabs().size(); if (size > 1) { tabPaneId.getTabs().add(1,tabCheckId); } else { tabPaneId.getTabs().add(tabCheckId); } tabPaneId.getSelectionModel().select(tabCheckId); } /** * 跳转到批量处理页面 * @param event */ @FXML protected void batchQuery(ActionEvent event){ int size = tabPaneId.getTabs().size(); if (size > 1) { tabPaneId.getTabs().add(2, tabBatchQueryId); } else { tabPaneId.getTabs().add(tabBatchQueryId); } tabPaneId.getSelectionModel().select(tabBatchQueryId); }

好了,javaFx登录跳转及主页面告一段落了,其他就不在此叙述了。如有疑问,可留言,本人不定时上博客。

另:感谢javaFX群成员的帮助。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有