javaFx 从登陆到界面跳转
来源:互联网 发布:envi处理landsat数据 编辑:程序博客网 时间:2024/06/06 03:09
闲话少说,直接上图
登陆
写这篇文章呢是因为这是我的第一个javaFX项目,记录一下心得体会。
参考文档:http://www.javafxchina.net/blog/ 中文API
1.首先来聊一聊登陆,这里有篇文章相当好:http://blog.csdn.net/nthack5730/article/details/51901593
但我没用该案例,对于我的这个项目,使用上述文章中的方法反而显得啰嗦麻烦。
1.1)登陆的原理
点击登陆,打开一个新窗口,关闭当前窗口。
我这里呢使用的是同一个stage,所以不用关闭登录窗口,主页面会直接覆盖登陆窗口。
代码:
主舞台MainApp.java
@Overridepublic 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 blocke.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() {@Overridepublic void run() {// TODO Auto-generated method stubgotomain();}});}}
注意此处:若登陆时有一些业务逻辑要处理,此处需要使用线程Platform.runLater,否则程序会进入假死状态
LoginController.java
@FXMLprivate Text actiontarget;@FXMLprivate TextField userNameField;@FXMLprivate PasswordField passwordField;@FXMLprivate TextField verifyCode;@FXMLprivate ImageView verifyImg;private MainApp application; /** * 点击按钮登录 * @param event */@FXMLprotected 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<Void> task = new Task<Void>() { @Override public Void call() throws InterruptedException { try {application.userLogin(userName.toString(), password.toString(), verifyCode.toString());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();actiontarget.setText(e.getMessage());try {application.initView(application.page);} catch (IOException ce) {// TODO Auto-generated catch blockactiontarget.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
/** * 初始化 */@Overridepublic void initialize(URL arg0, ResourceBundle arg1) {// TODO Auto-generated method stubtabPaneId.getTabs().remove(1, 3);}
remove方法,含头不含尾。
/** * 跳转到综合查询 * @param event */@FXMLprotected 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 */@FXMLprotected 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群成员的帮助。
- javaFx 从登陆到界面跳转
- javafx之登陆界面的跳转
- 如何实现从登陆界面跳转到游戏大厅界面
- 3s自动跳转到登陆界面
- JavaFX + CSS 开发登陆界面
- 用户名密码登陆后,还是跳转到登陆界面
- springmvc 登陆后跳转到登陆前的界面
- 从mainActive跳转到其他界面三部曲
- iOS 从应用程序跳转到评价界面
- android跳转登陆界面
- iOS如何实现登陆界面跳转到TabBarController
- 登陆界面和界面跳转
- 从一个界面自动跳转到下一个界面
- iOS从xib界面跳转到storyboard 中的界面和从storyboard中的界面跳转到另一个storyboard中的界面
- labview从登陆页面跳转到子页面方法一
- linux系统从开机到登陆界面的启动过程
- linux系统从开机到登陆界面的启动过程
- IOS中登陆界面如何跳转到含tabbar的界面
- JSP页面选择文件夹显示文件路径
- elasticsearch5.0启动出现的错误
- 关于程序员写文档(网络转载)
- T3非套打凭证间距调整
- Kubernetes1.7新特性:新增自动伸缩条件和参数
- javaFx 从登陆到界面跳转
- mac Xcode安装及使用Git代码管理工具
- JS-Number对象
- Can't create handler inside thread that has not called Looper.prepare()
- leetcode 169. Majority Element
- 营销费用的审批效率提升
- Installing Drozer on OS X El Capitan
- 用HBilder创建web项目
- 开通csdn博客啦