javafx之两种局部界面的呈现方式
要求:
点击左边不同的按钮,右边红色方框内出现不同的内容
===========================
第一种实现方法----插入fxml方法:
实现代码==================
工程目录:
源代码路径:http://pan.baidu.com/share/link?shareid=423722688&uk=1259703658
实现原理:在同一个地方嵌入三个fxml布局,然后设置可见性
第二种方法----tabpane方法:
实现代码=======
工程目录:
源代码路径:http://pan.baidu.com/share/link?shareid=458733868&uk=1259703658
实现原理:使用tabpane控件在一个root的根目录上实现不同层的内容
问题:
这种方法有是个要解决的问题?
第一个question:
如下图
多次点击“第一个功能页面”的按钮(本图点击两次),它会新建多个页面而不是一个
解决办法:
@FXML
private void pagetwo_open(ActionEvent event) {
boolean boo = true;
int selectnum = 0;
for(int i=0;i<tabnew.getTabs().size();i++){
if(tabnew.getTabs().get(i).getText().equals(btn_pagetwo.getText())){
boo = false;
selectnum = i;
}
}
if(boo){
Tab ntab = new Tab();
ntab.setText(btn_pagetwo.getText());
Label label = new Label("这个是第二个功能页面");
label.setFont(new Font("Cambria", 32));
label.setTextFill(Color.web("#0076a3"));
ntab.setContent(label);
ntab.setClosable(true);
tabnew.getTabs().add(ntab);
}
}
通过对比要新建tab的名称是否已经在tabpane里面,是就不新建,否就新建
第二个question:
点击了“第二个功能页面“的按钮(多次点击也只会新建一个),但是点击完成后右边显示的是“主页“界面,而不是想要的”第二个功能页面“
如下图:
解决办法:
@FXML
private void pagethree_open(ActionEvent event) {
boolean boo = true;
int selectnum = 0;
for(int i=0;i<tabnew.getTabs().size();i++){
if(tabnew.getTabs().get(i).getText().equals(btn_pagethree.getText())){
boo = false;
selectnum = i;
}
}
if(boo){
Tab ntab = new Tab();
ntab.setText(btn_pagethree.getText());
Label label = new Label("这个是第三个功能页面");
label.setFont(new Font("Cambria", 32));
label.setTextFill(Color.web("#0076a3"));
ntab.setContent(label);
ntab.setClosable(true);
tabnew.getTabs().add(ntab);
tabnew.getSelectionModel().select(ntab);
}else{
tabnew.getSelectionModel().select(selectnum);
}
}
传入新建的tab或则是已存在tab的序号,注意是tabnew.getSelectionModel().........而不是tabnew.getTabs()..........
参考地址:http://stackoverflow.com/questions/17047000/javafx-closing-a-tab-in-tabpane-dynamically
第三个question:
子tab关闭与不关闭的问题
如下图:
可以设置ntab.setClosable(true);来控制tab是否可以关闭(true表示可以关闭,false表示不可以关闭,不设置默认为true),但是你有可能设置为true或则是默认后都不能关闭tab,就像主页那个tab一样,那么就需要检查你的fxml文件。
它又三个状态:UNAVAILABLE、SELECTED_TAB 、ALL_TABS,如果为UNAVAILABLE那么表示无论你设置不设置都不能关闭,SELECTED_TAB
表示你当前选中的tab可以关闭,ALL_TABS表示所有的tab可以关闭
最后总结:
方法1:
每一个功能页面一个fxml文件,每一个fxml文件对应一个controller,便于归类整理和修改,但是它一次将所有的fxml都载入,也许会影响性能
方法2:
一个tabpane就将该功能实现,是很简单的方法,但是会造成fxml文件和controller文件过于复杂,不便于修改和编写
javafx之两种局部界面的呈现方式的更多相关文章
- KbmMW两种查询结果集通讯方式
KbmMW本身可以用QueryService的方式进行远程数据查询,但是SmpileService同样具有很强的扩展性可以实现数据查询,下面展示两种基于SmpileService的远程数据查询方法,其 ...
- reportConfig.xml两种数据源连接的配置方式
在reportConfig.xml配置文件中,我们提供了两种数据源连接的配置方式,分别如下: 1.jndi数据源配置(即:在dataSource中配置) 此配置适用于在j2ee的服务器中配置了j ...
- 流式思想概述和两种获取Stream流的方式
流式思想概述 整体来看,流式思想类似于工厂车间的生产流水线 当需要对多个元素进行操作(特别是多步操作)的时候,考虑到性能及便利性,我们应该首先拼好一个模型步骤方案,然后再按照方法去执行他 这张图中展示 ...
- Android APP 两种用程序拨号的方式
想在APP中添加一个拨号功能该怎样做呢?Android提供了两种方式,一种是ACTION_CALL方式直接拨打,另一种是ACTION_DIAL方式打开系统的拨号界面. 下面我们来做个小例子 首先需要在 ...
- WPF工作笔记:本地化支持、主进程通知、两种最常用异步编程方式
1.本地化支持 (1)重写控件默认的依赖属性LanguageProperty FrameworkElement.LanguageProperty.OverrideMetadata( typeof(Fr ...
- js两种定义函数、继承方式及区别
一:js两种定义函数的方式及区别 1:函数声明: function sayA() { alert("i am A"); } 2:函数表达式: var sayB = function ...
- php两种include加载文件方式效率比较如下
1)定义一个字符串变量,里面保存要加载的文件列表.然后foreach加载. $a = '/a.class.php;/Util/b.class.php;/Util/c.class.php'; $b = ...
- Nginx入门之两种handler函数的挂载方式
请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 接着上次的文章,今天研究<深入理解Nginx模块开发与架构解析>一书中给出的mytest的例子,发现和 /tengine.t ...
- 两种局部刷新UITableView的方法的使用条件
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ //1.取消选 ...
随机推荐
- win7配置ftp服务
1.首先开启ftp服务 2.配置ftp站点 3.让ftp服务器通过防火墙 4.编辑ftp访问权限,使用户能通过账号密码访问ftp,当然,在此之前,需要创建一个新的用户 到此,就可以远程访问ftp了
- Deep Learning 18:DBM的学习及练习_读论文“Deep Boltzmann Machines”的笔记
前言 论文“Deep Boltzmann Machines”是Geoffrey Hinton和他的大牛学生Ruslan Salakhutdinov在论文“Reducing the Dimensiona ...
- Android 自定义Adapter 但listview 只显示第一条数据
<ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content ...
- java, mybatis, 调用mysql存储过程
Map<String, Object> bindinfo = new HashMap<String, Object>(); bindinfo.put(&q ...
- 【java项目小记--JManager】项目开始原因及github部署
--记于2016-8-11 毕业已三载,忽然想起大学时的毕业设计项目,想到曾在毕业答辩上说,会吸取老师点评并逐渐完善该项目.而今 老师点评已忘了个干净,项目也还是毕业时的样子,正好最近有些时间,打算兑 ...
- (46) odoo核心文档分享
*前言: 要掌握一个系统,还得有扎实的基础,最好的方法,阅读核心文档 然后去实践. *核心文档列表如下: odoo8官方参考.pdf 链接: http://p ...
- STM32 ADC 测电压
1. STM32F103 ADC 本例使用STM32F103芯片的PA1引脚测试模拟输入的电压值. 查看文档<STM32F103X.pdf>第31页,引脚定义图: 得知PA1使用ADC1的 ...
- 自己写的一个SqlHelper,感觉使用起来挺方便的
自己写的一个SqlHelper,感觉使用起来挺方便的 using System; using System.Data; using System.Collections.Generic; using ...
- 使用Axis2建立WebService
Axis是apache重量级的WebService框架,虽然相比Xfire和CXF而言相对比较臃肿,但是企业中最常用的就是Axis,Axis2是Axis的升级版: 建立一个最简单的Axis2 W ...
- LINUX磁盘分区、格式化、挂载、卸载全程详解
1.一切皆文件 Linux系统有一个理念:“一切皆文件”,所以计算机的硬件在linux中也是以“文件”的形式存在于/dev目录中. 图为CentOS 6.5系统中/dev目录的部分内容.不同的计算 ...