Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 4093578
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 20, 20262026-05-20T19:38:08+00:00 2026-05-20T19:38:08+00:00

I have a large existing application written in SWT I have to modify. The

  • 0

I have a large existing application written in SWT I have to modify.

The GUI consists in shell opening non Dialog child shells.

Now I have to update information on parent shell when child shell is closed.

I imagined two options:

  1. Convert all child to extend Dialog class. Problem is it requires large refactoring.
  2. Pass a reference of the parent logic class so that before closing child I can call a method of the parent. I don’t like this design.

It would be nice if in parent code I could listen the child shell events and take action depending of what happen on child shell. This is kind of Observable pattern. I read in “SWT: a developper notebook”:

No event loop is required for the ChildShell. Why? Because the event loop for the parent shell handles the dispatching of events for all objects opened within the parent. The child remains open until it is closed by the user or until the parent is closed.

I’m not experimented in SWT and examples are scarce. So what is the SWT way to do this? Can I use the parent loop for such purpose?

Thanks.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-20T19:38:09+00:00Added an answer on May 20, 2026 at 7:38 pm

    I will suggest you to use ShellListener on the child shell. Then you can override the shellClosed method.

    Example

    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionAdapter;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.events.ShellEvent;
    import org.eclipse.swt.events.ShellListener;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Label;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Text;
    
    public class Test {
    
        private static Text text;
    
        public static void main (String [] args) 
        {
            Display display = new Display ();
            final Shell shell = new Shell (display);
            shell.setLayout(new GridLayout());
            shell.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
            shell.setSize(200, 100);
            shell.setText("Parent Shell");
    
            Label label = new Label(shell, SWT.NONE);
            label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
            label.setText("The text from child shell ...");
    
            text = new Text(shell, SWT.BORDER);
            text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    
            Button openChild = new Button(shell, SWT.PUSH);
            openChild.setText("Open Child ...");
            openChild.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    openChild(shell);
                }
            });
    
            shell.open ();
    
            while (!shell.isDisposed ()) {
                if (!display.readAndDispatch ()) display.sleep ();
            }
            display.dispose ();
        }
    
        private static void openChild(Shell parent)
        {
            final Shell dialog = new Shell (parent, SWT.DIALOG_TRIM);
            dialog.setLayout(new GridLayout());
            dialog.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
            dialog.setSize(200, 100);
            dialog.setText("Child Shell");
    
            Label childLabel = new Label(dialog, SWT.NONE);
            childLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
            childLabel.setText("Type something here ...");
    
            final Text childText = new Text(dialog, SWT.BORDER);
            childText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    
            Button okButton = new Button (dialog, SWT.PUSH);
            okButton.setText ("&OK");
            okButton.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(SelectionEvent e) {
                    dialog.close();
                }
            });
    
    
            dialog.addShellListener(new ShellListener() {
                public void shellIconified(ShellEvent e) {
                }
                public void shellDeiconified(ShellEvent e) {
                }
                public void shellDeactivated(ShellEvent e) {
                }
                public void shellClosed(ShellEvent e) {
                    if(text != null && !text.isDisposed())
                        text.setText(childText.getText());
                }
                public void shellActivated(ShellEvent e) {
                }
            });
    
    
            dialog.setDefaultButton (okButton);
            dialog.open ();
        }
    } 
    

    Note

    You can also use DisposeListener but in this scenario you can not use text.setText(childText.getText()); (see the example above). To handle this, save the text in a String variable and then use the string variable to populate the parents text box.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

i have a input tag which is non editable, but some times i need
I have a project that adds elements to an AutoCad drawing. I noticed that
I have a script that appends some rows to a table. One of the
I have a new web app that is packaged as a WAR as part
I have several USB mass storage flash drives connected to a Ubuntu Linux computer
I have a snippet to create a 'Like' button for our news site: <iframe
I have found this example on StackOverflow: var people = new List<Person> { new
I have a login.jsp page which contains a login form. Once logged in the
There doesn't seem to be any tried and true set of best practices to
I would like to get a sum from a column, with and without a

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.