【问题标题】:Highlight text in JavaFx TextArea突出显示 JavaFx TextArea 中的文本
【发布时间】:2014-02-27 13:38:44
【问题描述】:

我有一个像下面这样的文本区域,

我需要突出显示或选择所有文本“突出显示我”。我没有找到任何方法来突出显示文本区域中的文本。此外,我在 JavaFX 中找不到任何其他 API 来突出显示特定文本或字母(如 Swing 中的 JTextArea)的出现。有人可以建议我如何在文本区域中突出显示字符串吗?或者除了 JavaFX 中的这个文本区域之外还有其他可用的 API 吗?

我的代码:

public class FXTextArea extends Application {

    /**
     * @param args
     *            the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(final Stage primaryStage) {
        Group root = new Group();

        final TextArea textArea = TextAreaBuilder.create().prefWidth(390)
                .wrapText(true).build();

        ScrollPane scrollPane = new ScrollPane();
        scrollPane.getStyleClass().add("noborder-scroll-pane");
        scrollPane.setContent(textArea);
        scrollPane.setFitToWidth(true);
        scrollPane.setPrefWidth(390);
        scrollPane.setPrefHeight(180);

        Button buttonLoad = new Button("Load");
        buttonLoad.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent arg0) {
                FileChooser fileChooser = new FileChooser();

                // Set extension filter
                FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter(
                        "TXT files (*.txt)", "*.txt");
                fileChooser.getExtensionFilters().add(extFilter);

                // Show save file dialog
                File file = fileChooser.showOpenDialog(primaryStage);
                if (file != null) {
                    textArea.setText(readFile(file));
                }
                System.out.println(textArea.getText(0, 30));
                textArea.selectRange(0, 30);
            }

        });

        VBox vBox = VBoxBuilder.create().children(buttonLoad, scrollPane)
                .build();

        root.getChildren().add(vBox);
        primaryStage.setScene(new Scene(root, 400, 300));
        primaryStage.show();
    }

    private String readFile(File file) {
        StringBuilder stringBuffer = new StringBuilder();
        BufferedReader bufferedReader = null;

        try {

            bufferedReader = new BufferedReader(new FileReader(file));

            String text;
            while ((text = bufferedReader.readLine()) != null) {
                stringBuffer.append(text);
            }

        } catch (FileNotFoundException ex) {
            Logger.getLogger(FXTextArea.class.getName()).log(Level.SEVERE,
                    null, ex);
        } catch (IOException ex) {
            Logger.getLogger(FXTextArea.class.getName()).log(Level.SEVERE,
                    null, ex);
        } finally {
            try {
                bufferedReader.close();
            } catch (IOException ex) {
                Logger.getLogger(FXTextArea.class.getName()).log(Level.SEVERE,
                        null, ex);
            }
        }

        return stringBuffer.toString();
    }
}

预期输出:

线条应以任何颜色突出显示,如下所示。 “突出显示我”事件应突出显示如下,

【问题讨论】:

  • 举一个你期望输出的例子?
  • @Suzon 添加了预期输出的屏幕截图。希望这很好:)

标签: java javafx javafx-2 textarea


【解决方案1】:

您可以向this 寻求帮助。但限制是你需要在jdk8上。

【讨论】:

  • 这不能与 Java 7 FX 库一起使用吗? CodeFX 是第三方 jar。如果我错了,请纠正我。
  • 是的,CodeFX 是第三方 jar。 AFAIK,这不能与 Java 7 一起使用。
  • 好的。感谢您的回答。我需要在使用 CodeFx 时三思而后行,因为我目前正在使用 Java 7。+1 可能的解决方案。
  • 如果你不想使用 CodeFX,那么你将不得不去编写自定义文本区域。
  • 是的.. 想到了.. 谢谢。
猜你喜欢
  • 2020-08-26
  • 1970-01-01
  • 2012-02-26
  • 2011-11-10
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 2013-01-27
  • 2011-08-19
相关资源
最近更新 更多