JavaFX2 - 文本可复制的Label

背景介绍

我的公司和我个人一直都使用JavaFX2来编写客户端应用程序,同时也作为Applet在浏览器中运行。

我们的客户曾经拿我们的产品和网页对比,然后向我们提过两个需求:

(1) 希望界面上所有的文字都可以被复制,尤其是界面中的一些有参考意义的文字(而这些文字不可被编辑也不需要被编辑)

(2) 希望可以打印界面的内容,乃至滚动条中没有显示出来的内容

遗憾的是,以上两点我都没能很好的解决。以后在这两方面我还会继续学习和研究。

文本可复制的Label方案

今天这篇文章主要说的是如何让Label中的文本可以被复制。实际上,Label的文本是不能被复制的。

(1) 给Label加右键菜单,点击Copy菜单实现对文本的整体复制,但这不是常规意义上的复制

(2) 另一个替代的解决方案就是使用TextField,对其外观进行改进,使得看起来像Label

针对第(2)种方案,先看效果:

图1 TextField本身的效果

图2 改进后类似Label且可复制的效果

代码非常简单,如下:

代码片段1 初始化TextField

TextField field = new TextField("This is a copyable label which is implemented by a TextField.");
field.setEditable(false);
field.getStyleClass().add("copyablelabel");

代码片段2 为TextField设置CSS

.copyablelabel{
    -fx-background-color: transparent;
}

重点就在-fx-background-color: transparent;让TextField的边框和背景都消失了。

留点作业

最后,这里还有个缺陷,TextField不能换行显示多行文本,而Label是可以换行显示多行文本的。在这里,你可能已经想到了TextArea。以我目前的研究,我要遗憾的说,TextArea不行,TextArea的高度不能随文本的多少而自适应高度。TextArea的高度是预设的,文本超出高度会出滚动条,而只有一行文本时,其高度也不会减少。

你想到好办法了吗?

------------------------------------

欢迎访问我的独立博客:

www.alanz.me

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-04 19:37:04

JavaFX2 - 文本可复制的Label的相关文章

长按文本全复制

最近做一个长按文本复制全部内容的功能,在网上找了一个方法,使用起来很简单,但是自己在使用的过程中出现了问题. 我的项目中文本控件不是用的UILabel而是网上找的一个第三方框架OHAttributedLabel,其他的什么就不多说了,主要写写我在其中遇见的问题吧.事先我给label设置了一个长按手势,可是最终发现根本不执行相应的selector方法.最后发现是其中的一个重写方法-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

this 详解 此文本为复制来的(仅供自己学习用)

习惯了高级语言的你或许觉得JavaScript中的this跟Java这些面向对象语言相似,保存了实体属性的一些值.其实不然.将它视作幻影魔神比较恰当,手提一个装满未知符文的灵龛. 以下内容我希望广大同行们能够了解.全是掏箱底的干货,其中大部分占用了我很多时间才掌握. 全局this 浏览器宿主的全局环境中,this指的是window对象. <script type="text/javascript"> console.log(this === window); //true

vi &amp; vim复制,粘贴,剪切文本

我经常用vi编辑器,但基本上还是windows的习惯,没有系统的学过其功能,今天遇到了文本的复制这没有办法了,查看一下解决如下: 引用文本: ------------------------------------------------------------------------------------------------------------------ 时常自我反省,敏感的思想家 你对于自己及四周的环境能够比一般人控制得更好更彻底. 你讨厌表面化及肤浅的东西:你宁愿独自一人也不愿

【Java】使用JFrame监听事件创建一个复制文本功能的窗体程序与按钮快捷键

一.基本目标 设计一个窗体程序,有两个文本框,其中第二个文本框是不可编辑的,有三个按钮,点击Copy按钮能把第一个文本框复制到第二个文本框,点击Clear按钮能把两个文本框的内容清空,也可以用快捷键ALT+R与ALT+Y操作 点击Close按钮,能关闭这个窗体程序 二.基本思想 这个JFrame的布局与各组件名称如下,请联合下面的代码查看: 三.制作过程 请看如下代码: import java.awt.*; import java.awt.event.*; import javax.swing.

Xshell选中的同时把内容复制到剪贴板(还可以设置设置文本分隔符)

1.设置对话框 工具 -> 选项 -> 键盘和鼠标 -> 将选定的文本自动复制到剪贴板 2.贴图如下 2.1.打开设置对话框 2.2.设置键盘鼠标 作者:风波 mail : [email protected]

微信小程序组件解读和分析:十一、label标签

label标签组件说明: label标签,与html的label标签基本一样.label 元素不会向用户呈现任何特殊效果.不过,它为鼠标用户改进了可用性.如果您在 label 元素内点击文本,就会触发此控件.就是说,当用户选择该标签时,就会自动将焦点转到和标签绑定的表单控件上,主要用来改进表单组件的可用性.使用for属性找到对应的id,或者将控件放在该标签下,当点击时,就会触发对应的控件.for优先级高于内部控件,内部有多个控件的时候默认触发第一个控件.目前可以绑定的控件有:<button/>

Android应用开发之(通过ClipboardManager, ClipData进行复制粘贴)

在开发一些系统应用的时候,我们会用到Android的剪贴板功能,比如将文本文件.或者其他格式的内容复制到剪贴板或者从剪贴板获取数据等操作.Android平台中每个常规的应用运行在自己的进程空间中,相对于Win32而言Android上之间的进程间传递主要有IPC.剪切板.当然今天我们说下最简单的ClipboardManager.使用剪切板可以直接实现数据的传输.整个实现比较简单,注意剪切板中的类型判断. 使用起来很简单,系统给我们提供了很方便的接口,如下文本信息复制如下所示: //获取剪贴板管理服

[Android]通过ClipboardManager, ClipData进行复制粘贴[转]

Android应用开发之(通过ClipboardManager, ClipData进行复制粘贴) Android Developer: 在开发一些系统应用的时候,我们会用到Android的剪贴板功能,比如将文本文件.或者其他格式的内容复制到剪贴板或者从剪贴板获取数据等操作.Android平台中每个常规的应用运行在自己的进程空间中,相对于Win32而言Android上之间的进程间传递主要有IPC.剪切板.当然今天我们说下最简单的ClipboardManager.使用剪切板可以直接实现数据的传输.整

文本框控件JTextField和JTextArea的使用

-----------------siwuxie095 工程名:TestUI 包名:com.siwuxie095.ui 类名:TestTextFieldAndTextArea.java 工程结构目录如下: 在 Design 的根面板 contentPane 的上中下分别添加 一个 JTextField.JTextArea.JButton JTextField 即 单行文本框,JTextArea 即 多行文本框 文本框是文本的编辑器,可以指定文本的初始数据 即默认文本(text), 可以指定文字的