Я использую это PopupComposite, и я хотел бы знать, как открыть всплывающее окно (pc1), содержащее кнопку, которая открывает другую всплывающую оболочку (pc2), не закрывая первая всплывающая оболочка. Я попытался изменить прослушиватель активации PopupComposite, но все, что я получил, было решением, которое мерцает pc1 каждый раз, когда я открываю pc2. Я добавил следующий код в shellActivated:Как открыть всплывающее окно без закрытия предыдущего
if(shell.getParent() != null)
shell.getParent().setVisible(true);
Всякий раз, когда всплывающие окна теряют фокус, они должны скрывать (я не могу использовать FocusListener для оболочек, так как она не работает на Mac).
Вот мой тестер:
public class TestShells
{
public static void main(final String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
final Composite container = new Composite(shell, SWT.NULL);
container.setLayout(new FillLayout());
final Button btn = new Button(container, SWT.PUSH);
btn.setText("Button 1");
final PopupComposite pc1 = new PopupComposite(Display.getDefault().getActiveShell(), SWT.NULL);
final Button btn2 = new Button(pc1, SWT.PUSH);
btn2.setText("Button 2");
final PopupComposite pc2 = new PopupComposite(pc1.getShell(),SWT.NULL);
final Text text = new Text(pc2, SWT.BORDER);
btn.addSelectionListener(new SelectionListener()
{
public void widgetSelected(final SelectionEvent e)
{
pc1.show(btn.getLocation());
}
public void widgetDefaultSelected(final SelectionEvent e)
{
}
});
btn2.addSelectionListener(new SelectionListener()
{
public void widgetSelected(final SelectionEvent e)
{
pc2.show(btn2.getLocation());
}
public void widgetDefaultSelected(final SelectionEvent e)
{
// TODO Auto-generated method stub
}
});
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
Большое спасибо!
Благодарим вас за советы, но мне разрешено использовать только SWT. – spetrila
@JNewbie Что меняет ситуацию. В этом случае посмотрите на этот пример, который изменяет поведение закрытия: http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/Preventashellfromclosingprompttheuser.htm – Chrotenise
уже пробовал это, но мое условие не может быть проверено в этой точке так как оболочка, которую я собираюсь открыть дальше, открывается только после того, как она закрывается – spetrila