JavaFX中的可复制Label / TextField / LabeledText
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaFX中的可复制Label / TextField / LabeledText相关的知识,希望对你有一定的参考价值。
我只想在JavaFX中创建可复制的标签。我试图创建没有背景,没有焦点边框和默认背景颜色的TextField,但我没有成功。我发现了很多问题如何从控制中删除焦点背景但所有这些看起来像“黑客”。
是否有任何标准解决方案来实现可复制文本?
答案
您可以使用css创建没有边框和背景颜色的TextField:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class CopyableLabel extends Application
@Override
public void start(Stage primaryStage)
TextField copyable = new TextField("Copy this");
copyable.setEditable(false);
copyable.getStyleClass().add("copyable-label");
TextField tf2 = new TextField();
VBox root = new VBox();
root.getChildren().addAll(copyable, tf2);
Scene scene = new Scene(root, 250, 150);
scene.getStylesheets().add(getClass().getResource("copyable-text.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
public static void main(String[] args)
launch(args);
和
可复制,text.css:
.copyable-label, .copyable-label:focused
-fx-background-color: transparent ;
-fx-background-insets: 0px ;
另一答案
这是我使用的解决方案,除了标签之外还有一个小按钮可以复制文本:
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.Label;
import org.controlsfx.glyphfont.FontAwesome;
import org.controlsfx.glyphfont.Glyph;
import java.util.Locale;
public class CopiableLabel extends Label
public CopiableLabel()
addCopyButton();
public CopiableLabel(String text)
super(text);
addCopyButton();
public CopiableLabel(String text, Node graphic)
super(text, graphic);
private void addCopyButton()
Button button = new Button();
button.visibleProperty().bind(textProperty().isEmpty().not());
button.managedProperty().bind(textProperty().isEmpty().not());
button.setFocusTraversable(false);
button.setPadding(new Insets(0.0, 4.0, 0.0, 4.0));
button.setOnAction(actionEvent -> AppUtils.copyToClipboard(getText()));
Glyph clipboardIcon = AppUtils.createFontAwesomeIcon(FontAwesome.Glyph.CLIPBOARD);
clipboardIcon.setFontSize(8.0);
button.setGraphic(clipboardIcon);
setGraphic(button);
setContentDisplay(ContentDisplay.RIGHT);
以上是关于JavaFX中的可复制Label / TextField / LabeledText的主要内容,如果未能解决你的问题,请参考以下文章
setWrapText(true)不适用于JavaFX中的Label