Java JTextField setEnabled与setEditable
Java JTextField setEnabled与setEditable,java,swing,jtextfield,Java,Swing,Jtextfield,JTextField.setEnabled()和JTextField.setEditable()之间有什么区别? 在我的代码中,我有一个从JTextField继承的类的实例。但是当我设置它的属性setEnabled(false)时,我仍然可以在程序中编辑和处理它的内容。但是,当我设置其属性setEditable(false)时,我无法再编辑其文本。如果是这样的话。那么这里的setEnabled()属性的用途是什么 我的继承类代码是: private static class CCField e
JTextField.setEnabled()
和JTextField.setEditable()
之间有什么区别?
在我的代码中,我有一个从JTextField
继承的类的实例。但是当我设置它的属性setEnabled(false)
时,我仍然可以在程序中编辑和处理它的内容。但是,当我设置其属性setEditable(false)
时,我无法再编辑其文本。如果是这样的话。那么这里的setEnabled()
属性的用途是什么
我的继承类代码是:
private static class CCField extends JTextField{
private static final long serialVersionUID = 1L;
public CCField() {
this( DEFAULT_COLUMN_COUNT );
}
public CCField(final int cols) {
super( cols );
}
添加信息
当我调用此类的setEnabled()
属性时,它不会对文本字段显示任何效果,并且仍然保持启用状态。我的代码中有一个容器Jcomponent
,它将此CCField
作为子组件。因此,当我尝试使用setEnabled(false)
禁用它时,它仍然是可编辑的。然而,当我尝试使用setEditable(false)
禁用它时,它就被禁用了。
以下是我在容器中访问此文本字段的方式:
JComponent jComp = DDEUtil.getComponent(icTableLayout,icDS);
((JTextField)jComp.getComponent(1)).setEditable(false);
而在DDEUtil.getComponent
中发生的事情太复杂了,因为它涉及许多类,并且不可能在这里发布
我想知道我没有覆盖这个组件的任何方法,为什么它会显示这种行为。当
设置启用(false)
将字段完全变灰时,设置可编辑(false)
只是阻止它被编辑,但它看起来仍然一样。在我的例子中设置可编辑(false)
使字段变灰,而设置启用(false)
不使字段变灰
默认情况下,文本字段是可编辑的。代码setEditable(false)使文本字段不可编辑。它仍然是可选择的,用户可以从中复制数据,但用户不能直接更改文本字段的内容。
代码setEnabled(false)将禁用此文本字段。它是不可选择的,用户不能从中复制数据,用户不能直接更改文本字段的内容。
有用的链接
发布一个完整的程序来演示问题
setEnabled(false)
完全禁用文本字段setEditable(false)
仍然允许选择和复制其内容,但不允许修改其值。@JBNizet我认为这符合答案的条件。@JimGarrison:我认为实际的问题是:为什么setEnabled(false)不禁用我的文本字段。但是OP需要发布更多的代码来回答这个问题。当我调用这个类的setEnabled()属性时,它不会对文本字段显示任何效果,并且仍然保持启用状态。您未显示的代码中有错误;-)因此,无论是发布一个SSCCE还是在没有帮助的情况下解决它,没有人能猜出哪条不可见的线是错的……我已经展示了所有东西,除了DDEUtil.getComponent
,它太大、太复杂和通用,因为它正在使用反射生成许多组件。我的情况不是这样。这里的setEditable(false)
将字段变灰,而setEnabled(false)
什么都不做……它工作得很好,CCField
的代码肯定有问题,虽然没有解决问题,但我还是得到了我实际问题的答案,即不同的b/wsetEnabled
和setEditable
你能发布CCField的整个代码吗?这将有助于整个类的CCField已经张贴在原始问题中。非常奇怪的是,IMHO的“官方”是,残疾人是完全灰色的。“可编辑”只需锁定字段,但“仅”更改其背景灰显,同时文本保持可读性。你能确认并可能改进你的答案吗?使用Java1.8进行测试。