在JTextArea中更改文本选择类型

时间:2014-06-02 01:19:19

标签: java swing user-interface textarea swing-highlighter

在大多数文本编辑器中,我看到当选择文本时,所有行都会将颜色更改为选择颜色。enter image description here

但是在JTextArea中,在选择期间,仅选择文本颜色。enter image description here

如何在JTextArea中实现上述选择类型,其中所有选定区域都是彩色的?我找不到任何方法可以胜任这项工作。

1 个答案:

答案 0 :(得分:2)

也许DefaultHighlighter#setDrawsLayeredHighlights(false)可行:

enter image description here

import java.awt.*;
import java.io.*;
import javax.swing.*;
import javax.swing.text.*;

public class SelectionTypeTest {
  public JComponent makeUI() {
    JTextArea textArea = new JTextArea();
    DefaultHighlighter hl = (DefaultHighlighter) textArea.getHighlighter();
    System.out.println(hl.getDrawsLayeredHighlights());
    hl.setDrawsLayeredHighlights(false);
    textArea.setSelectionColor(Color.RED);
    textArea.setSelectedTextColor(Color.WHITE);
    try (Reader reader = new BufferedReader(new InputStreamReader(
          new FileInputStream("SelectionTypeTest.java"), "UTF-8"))) {
      textArea.read(reader, "");
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return new JScrollPane(textArea);
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.getContentPane().add(new SelectionTypeTest().makeUI());
    f.setSize(320, 240);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}