Java swing: прослушивание и повторение событий из одного кадра в другой - PullRequest
1 голос
/ 21 декабря 2011

у меня есть 2 кадра: родительский и дочерний .Я хочу сделать следующее: когда родительский фрейм активируется или деионизируется, дочерний фрейм делает то же самое.

private void attachListeners()
    {
        if (parentFrame != null)
        {
            parentFrame.addComponentListener(this);
            parentFrame.addWindowListener(new ViewEventAdapter(this));
        }
     @Override
        public void viewActivated()
        {            
            //  show it when the parent is activated
            if (!childFrame.isVisible())
            {  
                        childFrame.setVisible(true);
                        parentFrame.toFront();
            }
        }

Но это вызывает бесконечный цикл мерцания.Если я удаляю toFront (), я не могу переключить фокус на родительский кадр.Мне просто нужно как-то правильно переключить фокус.

Код слушателя:

    public class ViewEventAdapter implements WindowListener, InternalFrameListener
{
    private MyViewListener listener = null;


    public ViewEventAdapter(MiaViewListener inListener)
    {
        listener = inListener;
    }


    @Override
    public void windowActivated(WindowEvent inE)
    {
        listener.viewActivated();
    }


    @Override
    public void windowClosed(WindowEvent inE)
    {
        listener.viewClosed();
    }


    @Override
    public void windowClosing(WindowEvent inE)
    {
        listener.viewClosing();
    }


    @Override
    public void windowDeactivated(WindowEvent inE)
    {
        listener.viewDeactivated();
    }


    @Override
    public void windowDeiconified(WindowEvent inE)
    {
        listener.viewDeiconified();
    }


    @Override
    public void windowIconified(WindowEvent inE)
    {
        listener.viewIconified();
    }


    @Override
    public void windowOpened(WindowEvent inE)
    {
        listener.viewOpened();
    }


    @Override
    public void internalFrameActivated(InternalFrameEvent inE)
    {
        listener.viewActivated();
    }


    @Override
    public void internalFrameClosed(InternalFrameEvent inE)
    {
        listener.viewClosed();
    }


    @Override
    public void internalFrameClosing(InternalFrameEvent inE)
    {
        listener.viewClosing();
    }


    @Override
    public void internalFrameDeactivated(InternalFrameEvent inE)
    {
        listener.viewDeactivated();
    }


    @Override
    public void internalFrameDeiconified(InternalFrameEvent inE)
    {
        listener.viewDeiconified();
    }


    @Override
    public void internalFrameIconified(InternalFrameEvent inE)
    {
        listener.viewIconified();
    }


    @Override
    public void internalFrameOpened(InternalFrameEvent inE)
    {
        listener.viewOpened();
    }
}

public interface MyViewListener
{
    /**
     * Called when a view is activated
     */
    public void viewActivated();

    /**
     * Called when a view is closed
     */
    public void viewClosed();

    /**
     * Called when a view is closing
     */
    public void viewClosing();

    /**
     * Called when a view is deactivated
     */
    public void viewDeactivated();

    /**
     * Called when a view is deiconified
     */
    public void viewDeiconified();

    /**
     * Called when a view is iconified
     */
    public void viewIconified();

    /**
     * Called when a view is opened
     */
    public void viewOpened();
}

Пожалуйста, помогите.Заранее спасибо.

1 Ответ

2 голосов
/ 22 декабря 2011

Не используйте 2 JFrames.

Вместо этого родительский элемент должен быть JFrame, а дочерний - немодальным JDialog.Когда вы создаете диалоговое окно, вы указываете фрейм как родительский, и вы получаете это поведение по умолчанию.

Именно так разработано большинство приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...