JavaFX UI控件教程(二十二)之Titled Pane和Accordion

翻译自  Titled Pane and Accordion

本章介绍如何在JavaFX应用程序中使用accordion和title窗格的组合。

标题窗格是带标题的面板。它可以打开和关闭,它可以封装任何Node诸如UI控件或图像以及添加到布局容器的元素组。

标题窗格可以使用手风琴控件进行分组,这使您可以创建多个窗格并一次显示一个窗格。图21-1显示了一个结合了三个标题窗格的手风琴控件。

图21-1带有三个标题的折叠窗格

使用JavaFX SDK API中的AccordionTitledPane类在应用程序中实现这些控件。

 

创建标题窗格

创建TitledPane控件定义标题和一些内容。您可以通过使用类的双参数构造函数TitledPane或应用setTextsetContent方法来完成此操作。两种方法都显示在例21-1中。

例21-1声明TitledPane对象

//using a two-parameter constructor
TitledPane tp = new TitledPane("My Titled Pane", new Button("Button"));
//applying methods
TitledPane tp = new TitledPane();
tp.setText("My Titled Pane");
tp.setContent(new Button("Button"));

使用任一代码片段编译和运行应用程序将生成如图21-2所示的控件。

图21-2带按钮的标题窗格

标题窗格的大小调整为适应其内容的首选大小。您可以添加多行文本并评估结果,如图21-3所示。

图21-3带有一些文本的标题窗格

不要显式设置标题窗格的最小高度,最大高度或首选高度,因为这可能会在打开或关闭标题窗格时导致意外行为。

例21-2中显示的代码片段通过将几个控件放入GridPane布局容器中,将几个控件添加到标题窗格中。

示例21-2带有GridPane布局容器的标题窗格

TitledPane gridTitlePane = new TitledPane();
GridPane grid = new GridPane();
grid.setVgap(4);
grid.setPadding(new Insets(5, 5, 5, 5));
grid.add(new Label("First Name: "), 0, 0);
grid.add(new TextField(), 1, 0);
grid.add(new Label("Last Name: "), 0, 1);
grid.add(new TextField(), 1, 1);
grid.add(new Label("Email: "), 0, 2);
grid.add(new TextField(), 1, 2);        
gridTitlePane.setText("Grid");
gridTitlePane.setContent(grid);

使用此代码片段运行和编译应用程序时,将显示如图21-4所示的输出。

图21-4包含多个控件的标题窗格

您可以定义标题窗格的打开和关闭方式。默认情况下,所有标题窗格都是可折叠的,并且它们的移动是动画的。如果您的应用程序禁止关闭标题窗格,请使用setCollapsible带有false值的方法。您还可以通过应用setAnimated带有false值的方法来禁用动画打开。例21-3中显示的代码片段实现了这些任务。

例21-3调整标题窗格的样式

TitledPane tp = new TitledPane();
//prohibit closing
tp.setCollapsible(false);
//prohibit animating
tp.setAnimated(false);

将标题窗格添加到折叠中

在您的应用程序中,您可以使用标题窗格作为独立元素,或者可以使用Accordion控件将它们组合在一个组中。不要明确设置手风琴的最小,最大或首选高度,因为这可能会在打开其标题窗格之一时导致意外行为。

向手风琴添加几个标题窗格类似于向切换组添加切换按钮:一次只能在手风琴中打开一个标题窗格。例21-4创建了三个标题窗格并将它们添加到手风琴中。

例21-4折叠和三个标题窗格

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Accordion;
import javafx.scene.control.TitledPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.paint.Color;
import javafx.stage.Stage;public class TitledPaneSample extends Application {final String[] imageNames = new String[]{"Apples", "Flowers", "Leaves"};final Image[] images = new Image[imageNames.length];final ImageView[] pics = new ImageView[imageNames.length];final TitledPane[] tps = new TitledPane[imageNames.length];public static void main(String[] args) {launch(args);}@Override public void start(Stage stage) {stage.setTitle("TitledPane");Scene scene = new Scene(new Group(), 80, 180);scene.setFill(Color.GHOSTWHITE);final Accordion accordion = new Accordion ();        for (int i = 0; i < imageNames.length; i++) {           images[i] = new Image(getClass().getResourceAsStream(imageNames[i] + ".jpg"));pics[i] = new ImageView(images[i]);tps[i] = new TitledPane(imageNames[i],pics[i]); }   accordion.getPanes().addAll(tps);accordion.setExpandedPane(tps[0]);Group root = (Group)scene.getRoot();root.getChildren().add(accordion);stage.setScene(scene);stage.show();}
}

在循环内创建三个标题窗格。每个标题窗格的内容都定义为一个ImageView对象。通过使用getPanesaddAll方法将标题窗格添加到手风琴中。您可以使用该add方法而不是addAll方法添加单个标题窗格。

默认情况下,应用程序启动时会关闭所有标题窗格。例21-4中的setExpandedPane方法指定在运行样本时将打开带有苹果图片的标题窗格,如图21-5所示。

图21-5带有三个标题窗格的折叠

 

处理具有标题窗格的折叠的事件

您可以使用标题窗格和折叠在应用程序中显示不同的数据。例21-5创建了一个独立的标题窗格,其中GridPane包含布局容器和使用折叠组合的三个标题窗格。独立标题窗格包含电子邮件客户端的UI元素。折叠使图像的选择能够出现在Grid标题窗格的Attachment字段中。

例21-5为Accordion实现ChangeListener

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Accordion;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.TitledPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;public class TitledPaneSample extends Application {final String[] imageNames = new String[]{"Apples", "Flowers", "Leaves"};final Image[] images = new Image[imageNames.length];final ImageView[] pics = new ImageView[imageNames.length];final TitledPane[] tps = new TitledPane[imageNames.length];final Label label = new Label("N/A");public static void main(String[] args) {launch(args);}@Override public void start(Stage stage) {stage.setTitle("TitledPane");Scene scene = new Scene(new Group(), 800, 250);scene.setFill(Color.GHOSTWHITE);// --- GridPane containerTitledPane gridTitlePane = new TitledPane();GridPane grid = new GridPane();grid.setVgap(4);grid.setPadding(new Insets(5, 5, 5, 5));grid.add(new Label("To: "), 0, 0);grid.add(new TextField(), 1, 0);grid.add(new Label("Cc: "), 0, 1);grid.add(new TextField(), 1, 1);grid.add(new Label("Subject: "), 0, 2);grid.add(new TextField(), 1, 2);        grid.add(new Label("Attachment: "), 0, 3);grid.add(label,1, 3);gridTitlePane.setText("Grid");gridTitlePane.setContent(grid);// --- Accordionfinal Accordion accordion = new Accordion ();                for (int i = 0; i < imageNames.length; i++) {images[i] = new Image(getClass().getResourceAsStream(imageNames[i] + ".jpg"));pics[i] = new ImageView(images[i]);tps[i] = new TitledPane(imageNames[i],pics[i]); }   accordion.getPanes().addAll(tps);        accordion.expandedPaneProperty().addListener(new ChangeListener<TitledPane>() {public void changed(ObservableValue<? extends TitledPane> ov,TitledPane old_val, TitledPane new_val) {if (new_val != null) {label.setText(accordion.getExpandedPane().getText() + ".jpg");}}});HBox hbox = new HBox(10);hbox.setPadding(new Insets(20, 0, 0, 20));hbox.getChildren().setAll(gridTitlePane, accordion);Group root = (Group)scene.getRoot();root.getChildren().add(hbox);stage.setScene(scene);stage.show();}
}

当用户在折叠中打开标题窗格时,expandedPaneProperty折叠会改变。将ChangeListener通知对象此更改,并且折叠中的扩展标题窗格用于构造附件的文件名。此文件名设置为相应Label对象的文本。

图21-6显示了应用程序启动后的外观。附件标签包含“N / A”,因为没有选择标题窗格。

图21-6 TitledPaneSample应用程序的初始视图

如果展开Leaves标题窗格,Attachment标签将包含“Leaves.jpg”,如图21-7所示。

图21-7带叶子标题窗格的TitledPaneSample应用程序扩展

因为TitledPaneAccordion类都是类的扩展,所以Node可以对它们应用视觉效果或转换。您还可以通过应用CSS样式来更改控件的外观。

 

相关的API文档 

  • TitledPane

  • Accordion

  • Label

  • GridPane

  • TextField

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在ASP.NET Core 2.0中使用MemoryCache

说到内存缓存大家可能立马想到了HttpRuntime.Cache,它位于System.Web命名空间下&#xff0c;但是在ASP.NET Core中System.Web已经不复存在。今儿个就简单的聊聊如何在ASP.NET Core中使用内存缓存。我们一般将经常访问但是又不是经常改变的数据放进缓存是再好不过了&#xff0c;…

ssl1016 OJ8467-数的划分 鸣人的影分身【各种dp之8 7】

数的划分 Description 将整数n分成k份&#xff0c;且每份不能为空&#xff0c;任意两份不能相同(不考虑顺序)。   例如&#xff1a;n7&#xff0c;k3 (6&#xff1c;n&#xff1c;&#xff1d;200,2&#xff1c;&#xff1d;k&#xff1c;&#xff1d;6&#xff09;&#…

数据库的嵌套查询和统计查询

①求选修了数据结构的学生学号和成绩。 select s_no,score from choice where s_no in (select s_no from course where course_name数据结构) ②求01001课程的成绩高于张彬的学生学号和成绩。 select s_no,score from choice where course_no01001 and score>(select scor…

匿名对象的使用

package com.wdl.day09;/** 匿名对象的使用* 1.理解&#xff1a;我们创建的对象&#xff0c;没有显式的赋给一个变量名。即为匿名对象* 2.特征&#xff1a;匿名对象只能调用一次。* 3.使用&#xff1a;如下**/ public class InstanceTest {public static void main(String[] ar…

sql server中创建数据库和表的语法

下面是sql server中创建数据库&#xff0c;创建数据表以及添加约束的sql语句&#xff1a; use master --创建数据库 if exists (select * from sysdatabases where name jobtest)drop database jobtest create database jobtest on (namejobtest_data,filename D:\DB\jobtes…

在ASP.NET Core 2.0中使用CookieAuthentication

在ASP.NET Core中关于Security有两个容易混淆的概念一个是Authentication&#xff08;认证&#xff09;&#xff0c;一个是Authorization&#xff08;授权&#xff09;。而前者是确定用户是谁的过程&#xff0c;后者是围绕着他们允许做什么&#xff0c;今天的主题就是关于在ASP…

JavaFX UI控件教程(二十五)之Color Picker

翻译自 Color Picker 本章介绍ColorPicker控件&#xff0c;提供其设计概述&#xff0c;并说明如何在JavaFX应用程序中使用它。 JavaFX SDK中的颜色选择器控件是一个典型的用户界面组件&#xff0c;使用户可以从可用范围中选择特定颜色&#xff0c;或通过指定RGB或HSB组合来设…

ssl1217-删边【图论,dfs】

题目 给出一个连通无向图&#xff0c;求最多能删掉多少条边后还是连通图。 输入 4(顶点数) 6(边数) 1 2 (表示一条点1到点2的线) 1 3 1 4 2 3 2 4 3 4 输出 3 dfs解题思路 这道题其实不用dfs更简单&#xff0c;但是毕竟例题还是用一下吧。 首先我们如果到达一个点便…

英语不会读怎么办?它来教你……

大家好&#xff0c;我是雄雄&#xff0c;今天我又给大家分享好看又实用的软件啦~今天给大家分享的是一个比昨天的随机点名系统还要实用的软件&#xff0c;如果说昨天的随机点名系统只适合老师或者某些需要点名的朋友使用的话&#xff0c;那么今天分享的软件则是一个人人都可使用…

数据维护

&#xff08;1&#xff09;在学生表Student中插入一条记录&#xff08;‘001201’&#xff0c;‘王一山’&#xff0c;‘男’&#xff0c;1980-12-4&#xff09;。 insert into student values(001201,王一山,男,1980-12-4) &#xff08;2&#xff09;插入一条选课记录&#xf…

深入探索.NET框架内部了解CLR如何创建运行时对象

前言 SystemDomain, SharedDomain, and DefaultDomain。对象布局和内存细节。方法表布局。方法分派&#xff08;Method dispatching&#xff09;。 因为公共语言运行时(CLR)即将成为在Windows上创建应用程序的主角级基础架构, 多掌握点关于CLR的深度认识会帮助你构建高效的, …

方法的重载

package com.wdl.day09;/** 方法的重载&#xff08;overload&#xff09; loading...** 1.定义&#xff1a;在同一个类中&#xff0c;允许存在一个以上的同名方法&#xff0c;只要它们的参数个数或者参数类型不同即可。** "两同一不同":同一个类、相同方法名* …

JavaFX UI控件教程(二十六)之Pagination Control

翻译自 Pagination Control 本章介绍如何向JavaFX应用程序添加分页控件。它教授如何向应用程序添加分页控件&#xff0c;管理其页面项&#xff0c;以及使用CSS样式设置控件元素的样式。 分页控件&#xff0c;用于浏览分成较小部分的多页内容。典型用途包括浏览邮箱中的电子邮…

长风破浪会有时,直挂云帆济沧海……

自从长假开学以来&#xff0c;班内学生的状态一直不如我所愿。前几天刚入学&#xff0c;因为马上就就业了&#xff0c;所以对他们的安排还是以做项目为主&#xff0c;早在假期的时候就已经将学生分为人数不等的8个小组&#xff0c;其中开发两个小组&#xff0c;前端5个小组以及…

ssl1759-求连通分量【图论,深搜,广搜】

题目 水题系列。给出一个图&#xff0c;求他的连通分量。 科普&#xff1a;连通分量就是一个图中可以连接最多点的子图&#xff08;可以是它本身&#xff09;的点数量。 输入 5(点的数量) 1 2(表示1和2连通) 3 4 2 3 0 0(表示停止输入) 输出 4 解题思路 Er…这道题没…

可变个数的形参

package com.wdl.day09;/** 可变个数形参的方法** 1.jdk 5.0新增的内容* 2.具体使用&#xff1a;* 2.1 可变个数形参的格式&#xff1a;数据类型 ... 变量名* 2.2 当调用可变个数形参的方法时&#xff0c;传入的参数个数可以是&#xff1a;0个&#xff0c;1个,2个&#xff…

JavaScript表单

JavaScript中表单知识总结 1 readonly和disabled 共同点&#xff1a;都是导致内容不可以更改 区别&#xff1a; readonly&#xff1a;中的内容是可以提交的 disabled&#xff1a;数据是不可以提交的,不可以在被操作 2表单提交的方式 οnsubmit“return sub()” <input t…

.NET 传奇 1.0 的出版过程,以及未来计划

今年五月初开始在微博的头条文章连载《.NET 的一点历史故事》&#xff0c;是一件非常快乐的事情。在各方朋友们的鼓励和支持之下&#xff0c;除去公开连载的八个章节&#xff0c;其后又先后完成其他十个章节&#xff0c;首先通过收费阅读渠道做了分享。到五月底的时候&#xff…

JavaFX UI控件教程(二十七)之File Chooser

翻译自 File Chooser 本章介绍如何使用FileChooser该类使用户能够导航文件系统。本章提供的示例说明了如何打开一个或多个文件&#xff0c;配置文件选择器对话框窗口以及保存应用程序内容。 与其他用户界面组件类不同&#xff0c;FileChooser该类不属于该javafx.scene.contr…

sql server高级查询,看这篇文章就够了

先选择一个数据库 use jobtest go引入&#xff1a;该数据库jobtest里面有两张表&#xff0c;Student学生表和Grade年级表&#xff0c;表中的数据如下所示&#xff1a; 学生表Student&#xff1a; 年级Grade表&#xff1a; 接下来我们来看看sql server中的子查询&#xff1a…