JTextField setEnabled vs setEditable

时间:2014-02-11 06:57:11

标签: java swing jtextfield

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)禁用它时,它被禁用。 这就是我在容器中访问此textField的方式:

 JComponent jComp = DDEUtil.getComponent(icTableLayout,icDS);
 ((JTextField)jComp.getComponent(1)).setEditable(false);

DDEUtil.getComponent中发生的事情过于复杂,因为涉及多个课程而且无法在此发布。

我想我没有覆盖此组件的任何方法,所以为什么它会显示这种行为。

2 个答案:

答案 0 :(得分:25)

在我的情况下,setEditable(false)使字段变灰,而setEnabled(false)不会使字段变灰。

  

默认情况下,TextField可编辑。代码setEditable(false)使TextField不可编辑。它仍然是可选的,用户可以从中复制数据,但用户无法直接更改TextField的内容。


  

代码setEnabled(false),禁用此TextField。它不可选,用户无法从中复制数据,用户无法直接更改TextField的内容。


有用的链接

  1. How to Use Text Fields
  2. Component#setEnabled()

答案 1 :(得分:3)

虽然setEnabled(false)完全灰显了该字段,setEditable(false)只是阻止它被编辑,但它仍然看起来一样。