热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

使用XML自定义控件(CustomControlDesignedbyXML)

关键是其中的逻辑结构设计:自定义的控件很简单:[html]<?xmlversion"1.0"encoding"UTF-8"?><?importjavafx.scene.control.*?><!--fx:rootisusedprimarilywhen
关键是其中的逻辑结构设计:自定义的控件很简单:
 
 
[html]  
 
  
 
  
 
    stylesheets="customcontrol/customcontrol.css" styleClass="v-box">  
     
   
 
 
其中使用的CSS样式表:
 
[css]  
.v-box {  
    -fx-spacing: 5;  
}  
  
.text-field {  
    -fx-highlight-fill: linear-gradient(orange, orangered);  
}  
 
Package-info:
 
[java]  
/** 
 * An implementation of custom control. 
 *  
 * @author HAN 
 */  
package customcontrol;  
 
模型建立(充当Controller和Root):
 
[java]  
package customcontrol;  
  
import java.io.IOException;  
  
import javafx.beans.property.StringProperty;  
import javafx.fxml.FXML;  
import javafx.fxml.FXMLLoader;  
import javafx.scene.control.Button;  
import javafx.scene.control.TextField;  
import javafx.scene.layout.VBox;  
  
/** 
 * For custom control creation in XML, it is assured by the associated use of 
 * fxmlLoader.setController(this); and 
 * fxmlLoader.setRoot(this); 
 *  
 * @author HAN 
 *  
 */  
public class CustomControl extends VBox {  
    @FXML  
    private TextField textField;  
      
    @FXML  
    private Button button;  
  
    public CustomControl() {  
        FXMLLoader fxmlLoader = new FXMLLoader();  
        fxmlLoader.setController(this);  
        fxmlLoader.setRoot(this);  
        fxmlLoader.setLocation(CustomControl.class.getResource("View.xml"));  
        try {  
            fxmlLoader.load();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
  
    public final String getTextFieldText() {  
        return textFieldTextProperty().get();  
    }  
  
    public final void setTextFieldText(String text) {  
        textFieldTextProperty().set(text);  
    }  
  
    public StringProperty textFieldTextProperty() {  
        return textField.textProperty();  
    }  
      
    public final String getButtonText() {  
        return buttonTextProperty().get();  
    }  
  
    public final void setButtonText(String text) {  
        buttonTextProperty().set(text);  
    }  
  
    public StringProperty buttonTextProperty() {  
        return button.textProperty();  
    }  
  
    @FXML  
    private void doSomething() {  
        System.out.println("The button was clicked!");  
    }  
}  
 
Java中的使用样例:
1.若此样例不使用自定义的CSS样式表,则默认为开发者定义的风格:
 
[java]  
package customcontrol;  
  
import javafx.application.Application;  
import javafx.scene.Scene;  
import javafx.stage.Stage;  
  
public class UseInJava extends Application {  
    public static void main(String[] args) {  
        launch(args);  
    }  
  
    @Override  
    public void start(Stage stage) throws Exception {  
        CustomControl customCOntrol= new CustomControl();  
        customControl.setTextFieldText("Hello!");  
        customControl.setButtonText("MyButton");  
        customControl.getStyleClass().add("custom-control");  
  
        Scene scene = new Scene(customControl);  
//      scene.getStylesheets().add(  
//              UseInJava.class.getResource("useinjava.css").toExternalForm());  
        stage.setScene(scene);  
        stage.setTitle("Custom Control");  
        stage.setWidth(300);  
        stage.setHeight(200);  
        stage.show();  
    }  
}  
 
 
 
2. 然而强大之处在于用户可以Override开发者定义的控件内部各自Region的风格:
[java]  
package customcontrol;  
  
import javafx.application.Application;  
import javafx.scene.Scene;  
import javafx.stage.Stage;  
  
public class UseInJava extends Application {  
    public static void main(String[] args) {  
        launch(args);  
    }  
  
    @Override  
    public void start(Stage stage) throws Exception {  
        CustomControl customCOntrol= new CustomControl();  
        customControl.setTextFieldText("Hello!");  
        customControl.setButtonText("MyButton");  
        customControl.getStyleClass().add("custom-control");  
  
        Scene scene = new Scene(customControl);  
        scene.getStylesheets().add(  
                UseInJava.class.getResource("useinjava.css").toExternalForm());  
        stage.setScene(scene);  
        stage.setTitle("Custom Control");  
        stage.setWidth(300);  
        stage.setHeight(200);  
        stage.show();  
    }  
}  
 
[css]  
.custom-control .button {  
    -fx-base: #99bcfd;  
}  
  
.custom-control .text-field {  
    -fx-highlight-fill: linear-gradient(greenyellow, limegreen);  
}  
 

推荐阅读
  • 通过自定义 `TextView`,实现了在用户点击或焦点变化时动态调整字体颜色的效果。该方法利用了 `ColorStateList` 和 `Selector` 资源文件,确保了界面交互的流畅性和视觉效果的提升。具体实现中,通过重写 `onTouchEvent` 和 `onFocusChanged` 方法,精确控制了颜色变化的时机和状态。此外,还对性能进行了优化,确保在高频率操作下依然保持高效响应。 ... [详细]
  • 解决基于XML配置的MyBatis在Spring整合中出现“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”问题的方法
    在将Spring与MyBatis进行整合时,作者遇到了“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”的问题。该问题主要出现在使用XML文件配置DAO层的情况下,而注解方式配置则未出现类似问题。作者详细分析了两个配置文件之间的差异,并最终找到了解决方案。本文将详细介绍问题的原因及解决方法,帮助读者避免类似问题的发生。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • C++ STL 常见函数应用详解与实例解析
    本文详细解析了 C++ STL 中常见函数的应用,并通过具体实例进行说明。特别地,文章对迭代器(iterator)的概念进行了深入探讨,将其视为一种将迭代操作抽象化的工具,便于在不同容器间进行元素访问和操作。此外,还介绍了迭代器的基本类型、使用方法及其在算法中的应用,为读者提供了丰富的实践指导。 ... [详细]
  • 在CSS中处理单行文本长度限制的问题时,可以通过设置文本颜色、定义块级元素等方法来实现。具体而言,通过使用 `color: #000;` 来控制文字颜色,并将元素定义为块级元素(`display: block;`),可以有效管理文本的显示效果。此外,还可以结合其他CSS属性,如 `overflow: hidden;` 和 `text-overflow: ellipsis;`,以确保超出部分的文字被优雅地隐藏或截断,从而提升用户体验。 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 本文深入解析了 Apache 配置文件 `httpd.conf` 和 `.htaccess` 的优化方法,探讨了如何通过合理配置提升服务器性能和安全性。文章详细介绍了这两个文件的关键参数及其作用,并提供了实际应用中的最佳实践,帮助读者更好地理解和运用 Apache 配置。 ... [详细]
  • 题目描述非常吸引人。每颗星星可以通过其在窗口的左下角和右上角位置构建两条扫描线,从而将问题转化为区间增减和求最大值的操作。需要注意的是,位于边界的星星不应计入结果,因此在处理时应分别对左右边界进行适当的增减调整。此外,利用线段树和离散化技术可以显著提高算法效率,确保在大规模数据下的性能表现。 ... [详细]
  • Vuex 实战进阶:构建高效笔记本应用(第二篇)
    在上一篇文章中,我们初步探讨了 Vuex 在该项目中的应用。本文将深入解析整个项目的架构设计。首先回顾 `main.js` 的内容,然后重点分析 `App.vue` 文件,其中引入了 `Toolbar.vue` 和 `NodeList.vue` 组件,详细说明它们在应用中的作用和交互方式。通过这些组件的协同工作,我们将展示如何构建一个高效且响应迅速的笔记本应用。 ... [详细]
  • 如何运用蒙特卡洛方法计算NPV:计算机专业毕业设计遇到难题怎么办?
    许多计算机科学专业的学生在大学期间都会遇到这样的困扰:课堂上教授的内容往往偏向理论,实际应用的知识点讲解得较为浅显和概括,导致在进行毕业设计时,如运用蒙特卡洛方法计算净现值(NPV)等复杂问题时感到无从下手。本文旨在探讨如何通过深入理解和实践蒙特卡洛模拟技术,解决这类计算难题,为学生的毕业设计提供实用指导。 ... [详细]
  • 期末Web开发综合实践项目:运用前端技术打造趣味小游戏体验
    期末Web开发综合实践项目中,学生通过运用HTML、CSS和JavaScript等前端技术,设计并实现了一款趣味性十足的小游戏。该项目不仅检验了学生对前端基础知识的掌握情况,还提升了他们的实际操作能力和创意设计水平。视频链接展示了项目的最终成果,直观呈现了游戏的互动性和视觉效果。 ... [详细]
  • 新年伊始,正是学习的最佳时机。本文全面解析了CK1957-Zookeeper的核心概念与实践技巧,旨在帮助初学者快速掌握这一深度学习工具。通过详细的理论讲解和实际操作示例,读者可以更好地理解Zookeeper的工作原理及其在分布式系统中的应用。无论是新手还是有一定基础的学习者,都能从中受益匪浅。 ... [详细]
  • 探究Oracle数据库字符集编码的详细方法与实践
    本文深入探讨了Oracle数据库字符集编码的详细方法与实践。首先,通过执行 `SELECT USERENV('language') FROM DUAL;` 查询服务端字符集编码。其次,通过在注册表中搜索 `NLS_LANG` 参数来查看客户端字符集编码。此外,文章还介绍了如何在不同场景下正确配置和转换字符集,以确保数据的一致性和完整性。 ... [详细]
  • 解决手机浏览器无法加载CSS文件的技术方法与常见问题分析
    针对手机浏览器无法加载CSS文件的问题,本文提出了几种有效的解决方案:首先,确保CSS文件路径正确无误;其次,统一CSS文件和网页的编码格式;最后,检查并修正文件后缀的MIME类型设置,以确保浏览器能够正确识别和解析CSS文件。此外,还探讨了可能导致该问题的其他常见原因,如缓存问题和服务器配置错误等。 ... [详细]
author-avatar
521壮壮妈_386
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有