Re: setEnabled(false) in new GenericDialog

Posted by Michael Schmid on
URL: http://imagej.273.s1.nabble.com/setEnabled-false-in-new-GenericDialog-tp3688595p3688598.html

Hi Michael,

Two remarks:

(1) Your code looks fine to me, but the Java specification does not  
say whether a disabled TextField will be somehow decorated (grayed  
out) or not. Java does not know that the label 'How many times'  
belongs to the textfield, so the label certainly won't be grayed out.  
Input into the text field should be disabled, however.

(2) SetEnabled in DialogItemChanged of a DialogListener will often  
fail on a Macintosh - at least under Java 1.5 on the Mac there is an  
annoying bug that makes such code not work properly:
Out of several nearly simultaneous changes to dialog components only  
the first change is displayed, all other changes wait for the next  
update, e.g., if the user clicks another field. So enabling the input  
field can be delayed.

On the Mac, the easiest work around would be a delay of 100 millisec  
before a setEnabled call in a DialogListener.

(By the way, this bug is also the reason why the 'preview' and  
'wait...' label of the preview checkbox is sometimes displayed  
incorrectly on Macs.)


Michael
________________________________________________________________

On 14 Apr 2010, at 02:43, Doube, Michael wrote:

> Hi All,
>
> I have a TextField and a Checkbox in a GenericDialog.  I want the  
> TextField to be setEnabled(false) , i.e. greyed out, when the  
> Checkbox is false.  This I can accomplish using a DialogListener  
> when the user clicks on the Checkbox.  But I want the default  
> setting to be that the Checkbox is false and the TextField is  
> correspondingly greyed out - i.e. before user input changes the  
> state of any of the Components, triggering the Listener.
>
> I've tried getting the Vector of numeric fields, then getting the  
> correct element using both get() and elementAt(), and setEnabled
> (false), directly before shwoDialog() but it doesn't seem to work.
>
> ...
> gd.addCheckbox("Do it", false)
> gd.addNumericField("How many times?", 1, 0); //to be greyed out  
> initially
> ...
> Vector<?> numbers = gd.getNumericFields();
> TextField num = (TextField) numbers.get(3) // or .elementAt(3);
> num.setEnabled(false);
> showDialog();
>
> Any ideas?  I'm on Ubuntu 10.04, JRE 1.6 19, IJ 1.43s
>
> Michael