如何在JTextArea Swing上禁用文本选择

Phạ*_*Bảo 2 java swing

我不希望用户选择内容JTextArea.我用,setEditable(false)但它不起作用.如何禁用JTextArea组件的此功能.你能给我一些建议吗?谢谢.

在此输入图像描述

cam*_*ckr 5

您可以将"标记"设置为与插入符号的"点"相等.当这些值相等时,没有文本选择:

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

public class NoTextSelectionCaret extends DefaultCaret
{
    public NoTextSelectionCaret(JTextComponent textComponent)
    {
        setBlinkRate( textComponent.getCaret().getBlinkRate() );
        textComponent.setHighlighter( null );
    }

    @Override
    public int getMark()
    {
        return getDot();
    }

    private static void createAndShowUI()
    {
        JTextField textField1 = new JTextField("No Text Selection Allowed");
        textField1.setCaret( new NoTextSelectionCaret( textField1 ) );
        textField1.setEditable(false);

        JTextField textField2 = new JTextField("Text Selection Allowed");

        JFrame frame = new JFrame("No Text Selection Caret");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(textField1, BorderLayout.NORTH);
        frame.add(textField2, BorderLayout.SOUTH);
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您想在任何挥杆控件上禁用文本选择,例如JtextArea您可以使用以下编码:

JtextArea.setHighlighter(null);
Run Code Online (Sandbox Code Playgroud)

这一行编码将有助于禁用文本选择,并且可以在帧执行时放置在构造函数中或初始化方法中.

希望这可以帮助