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