我不希望用户选择JTextArea上的内容。我使用setEditable(false),但它不工作。如何禁用JTextArea组件的此功能。您能给予我建议吗?谢谢。
JTextArea
setEditable(false)
wd2eg0qa1#
您可以将“mark”设置为与插入符号的“dot”相等。当这些值相等时,不存在文本选择:
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(); } }); } }
btqmn9zl2#
如果您只想禁用任何swing控件(如JtextArea)上的文本选择,则可以使用以下代码:
JtextArea
JtextArea.setHighlighter(null);
这一行代码将帮助禁用文本选择,并可放置在构造函数中或Frame执行时初始化的方法中。希望这对你有帮助
k97glaaz3#
我已经晚了,但我发现了以下内容。我曾尝试在JTextPane上使用setEnabled(false)来显示静态(用户不可修改的)内容,如行号(用于另一个文本组件)。仅这一项就阻止了组件获得焦点和文本选择:
JTextPane
setEnabled(false)
JTextArea textArea = new JTextArea("Static text"); textArea.setEnabled(false);
我使用setEnabled(false)的问题是,它强制所有文本使用一个disabledTextColor(我已经将其追溯到javax.swing.text.GlyphView.paint()),而我想对单个行/块进行样式化。我最终尝试了setFocusable(false),它似乎同时满足了这两种需求:
disabledTextColor
javax.swing.text.GlyphView.paint()
setFocusable(false)
完整的解决方案需要额外的setEditable(false)来防止鼠标光标发生变化,但仅此而已-两个属性:
JTextArea textArea = new JTextArea("Static text"); textArea.setEditable(false); textArea.setFocusable(false);
3条答案
按热度按时间wd2eg0qa1#
您可以将“mark”设置为与插入符号的“dot”相等。当这些值相等时,不存在文本选择:
btqmn9zl2#
如果您只想禁用任何swing控件(如
JtextArea
)上的文本选择,则可以使用以下代码:这一行代码将帮助禁用文本选择,并可放置在构造函数中或Frame执行时初始化的方法中。
希望这对你有帮助
k97glaaz3#
我已经晚了,但我发现了以下内容。我曾尝试在
JTextPane
上使用setEnabled(false)
来显示静态(用户不可修改的)内容,如行号(用于另一个文本组件)。仅这一项就阻止了组件获得焦点和文本选择:我使用
setEnabled(false)
的问题是,它强制所有文本使用一个disabledTextColor
(我已经将其追溯到javax.swing.text.GlyphView.paint()
),而我想对单个行/块进行样式化。我最终尝试了setFocusable(false)
,它似乎同时满足了这两种需求:完整的解决方案需要额外的
setEditable(false)
来防止鼠标光标发生变化,但仅此而已-两个属性: