MultiLineLabel in GenericDialog

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

MultiLineLabel in GenericDialog

Stephan Preibisch
Hi everyone,

I want to use a MultiLineLabel to display text in a GenericDialog. Using a listener I want to change that comment (the MultiLineLabel) depending on a choice in one of the other elements. However, there is no method to set the text of the MultiLineLabel.

Until now, I used a Label, where after adding the message " " to the GenericDialog, I changed the text which then contains "\n"'s before calling showDialog(). This way I got a Label which has multiple lines and a setText() method that I can call from the Listener. I just recently figured out that this works only under Mac, not Windows and Linux. Bummer.

Is there any way to set the text of a MultiLineLabel without using reflections?
Alternatively, I could use multiple normal Labels, but then the distance between them is far too large, it does not look like a block.

If this all doesn't work, I will extend the MultiLineLabel class and add it as my own element. But if there is a more elegant way would be nice.

Thanks a lot,
Stephan
---

Dr. Stephan Preibisch
HFSP Fellow
Robert H. Singer / Eugene Myers lab

Albert Einstein College of Medicine / HHMI Janelia Farm / MPI-CBG

email: [hidden email] / [hidden email] / [hidden email]
web: http://www.preibisch.net/


--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html
Reply | Threaded
Open this post in threaded view
|

Re: MultiLineLabel in GenericDialog

Rasband, Wayne (NIH/NIMH) [E]
On May 8, 2014, at 1:38 PM, Stephan Preibisch wrote:

> Hi everyone,
>
> I want to use a MultiLineLabel to display text in a GenericDialog. Using a listener I want to change that comment (the MultiLineLabel) depending on a choice in one of the other elements. However, there is no method to set the text of the MultiLineLabel.

The latest ImageJ daily build (1.49a19) adds a setText() method to the MultiLineLabel class. The following example plugin, which is recordable, demonstrates how to use this method.

-wayne

import ij.*;
import ij.plugin.PlugIn;
import ij.gui.*;
import java.awt.*;

public class Dialog_Test implements PlugIn, DialogListener {
    private String divider = "----------";
    private String defaultText = "abcdef";
    private static GenericDialog gd;
    String text;

    public void run(String arg) {
        showDialog();
        IJ.log("Text: "+text);
    }
               
    void showDialog() {
        gd = new GenericDialog("Test Dialog");
        gd.addStringField("Text: ", defaultText);
        gd.addMessage(divider+"\n"+defaultText+"\n"+divider);
        gd.addDialogListener(this);
        gd.showDialog();
    }

    public boolean dialogItemChanged(GenericDialog gd, AWTEvent e) {
        text = gd.getNextString();
        MultiLineLabel label = (MultiLineLabel)gd.getMessage();
        label.setText(divider+"\n"+text+"\n"+divider);
        return true;
    }
   
}


> Until now, I used a Label, where after adding the message " " to the GenericDialog, I changed the text which then contains "\n"'s before calling showDialog(). This way I got a Label which has multiple lines and a setText() method that I can call from the Listener. I just recently figured out that this works only under Mac, not Windows and Linux. Bummer.
>
> Is there any way to set the text of a MultiLineLabel without using reflections?
> Alternatively, I could use multiple normal Labels, but then the distance between them is far too large, it does not look like a block.
>
> If this all doesn't work, I will extend the MultiLineLabel class and add it as my own element. But if there is a more elegant way would be nice.
>
> Thanks a lot,
> Stephan
> ---
>
> Dr. Stephan Preibisch
> HFSP Fellow
> Robert H. Singer / Eugene Myers lab
>
> Albert Einstein College of Medicine / HHMI Janelia Farm / MPI-CBG

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html
Reply | Threaded
Open this post in threaded view
|

Re: MultiLineLabel in GenericDialog

Stephan Preibisch
Thanks a lot Wayne!

> On May 8, 2014, at 1:38 PM, Stephan Preibisch wrote:
>
>> Hi everyone,
>>
>> I want to use a MultiLineLabel to display text in a GenericDialog. Using
>> a listener I want to change that comment (the MultiLineLabel) depending
>> on a choice in one of the other elements. However, there is no method to
>> set the text of the MultiLineLabel.
>
> The latest ImageJ daily build (1.49a19) adds a setText() method to the
> MultiLineLabel class. The following example plugin, which is recordable,
> demonstrates how to use this method.
>
> -wayne
>
> import ij.*;
> import ij.plugin.PlugIn;
> import ij.gui.*;
> import java.awt.*;
>
> public class Dialog_Test implements PlugIn, DialogListener {
>     private String divider = "----------";
>     private String defaultText = "abcdef";
>     private static GenericDialog gd;
>     String text;
>
>     public void run(String arg) {
>         showDialog();
>         IJ.log("Text: "+text);
>     }
>
>     void showDialog() {
>         gd = new GenericDialog("Test Dialog");
>         gd.addStringField("Text: ", defaultText);
>         gd.addMessage(divider+"\n"+defaultText+"\n"+divider);
>         gd.addDialogListener(this);
>         gd.showDialog();
>     }
>
>     public boolean dialogItemChanged(GenericDialog gd, AWTEvent e) {
>         text = gd.getNextString();
>         MultiLineLabel label = (MultiLineLabel)gd.getMessage();
>         label.setText(divider+"\n"+text+"\n"+divider);
>         return true;
>     }
>
> }
>
>
>> Until now, I used a Label, where after adding the message " " to the
>> GenericDialog, I changed the text which then contains "\n"'s before
>> calling showDialog(). This way I got a Label which has multiple lines
>> and a setText() method that I can call from the Listener. I just
>> recently figured out that this works only under Mac, not Windows and
>> Linux. Bummer.
>>
>> Is there any way to set the text of a MultiLineLabel without using
>> reflections?
>> Alternatively, I could use multiple normal Labels, but then the distance
>> between them is far too large, it does not look like a block.
>>
>> If this all doesn't work, I will extend the MultiLineLabel class and add
>> it as my own element. But if there is a more elegant way would be nice.
>>
>> Thanks a lot,
>> Stephan
>> ---
>>
>> Dr. Stephan Preibisch
>> HFSP Fellow
>> Robert H. Singer / Eugene Myers lab
>>
>> Albert Einstein College of Medicine / HHMI Janelia Farm / MPI-CBG
>
> --
> ImageJ mailing list: http://imagej.nih.gov/ij/list.html
>

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html