当前位置: 首页 > 知识库问答 >
问题:

SWT-修改窗口关闭按钮(红色X)

卫烨
2023-03-14

当用户使用窗口关闭按钮(红色X)按钮关闭任何应用程序窗口时。它会导致我的应用程序出现小部件被释放问题。当他们使用我提供的关闭应用程序关闭窗口时。一切正常。

@Override
protected void createButtonsForButtonBar(Composite parent) {
   createButton(parent, IDialogConstants.OK_ID, "Close Aplot", true);
}

@Override
protected void okPressed() {
   getShell().setVisible(false);
}
  1. 按下车窗关闭按钮(红色X)可以使用上述代码吗

共有3个答案

贡可人
2023-03-14

我要做的第一件事是覆盖Application ationWindow中的关闭()方法

/** the rc from the message dialog */
int rc = -1;

@Override
public boolean close()
{
    MessageDialog messagedialog = new MessageDialog(getShell(),
            "Confirm Exit", null, "Are you sure you want to exit?", 4,
            new String[]
            { "Yes", "No" }, 1);
    messagedialog.setBlockOnOpen(true);
    messagedialog.open();

    rc = messagedialog.getReturnCode();

    /** int to hold the return code from the message dialog */
    if (rc == 0)
    {
        return true;
    } else
    {
        return false;
    }
}

我要做的第二件事是在“X”关闭按钮上侦听事件

shell.addListener(SWT.Close, new Listener()
{
    @Override
    public void handleEvent(Event event)
    {
        switch (rc)
        {
        case 0: // yes pressed
            event.doit = true;
            break;
        case 1: // no pressed
            event.doit = false;
            break;
        case -1: // escape pressed
            break; // do nothing
        default:
            break;
        }
    }
});

“event.doit”布尔字段确定shell的闭包。如果该值等于“true”-“let doit”,则让我们关闭外壳(即rc=0)。

如果该值等于1(rc=1),则外壳保持打开状态。

如果按下ESC(即rc=-1),我们什么都不做。但是如果这是一个要求,我们可以最小化shell,或者根据这个事件执行一些其他操作。

宓季同
2023-03-14

在jface对话框中,无论在哪里按下OK或按下CANCEL或单击关闭(红色x按钮),它总是会调用关闭()方法。

覆盖关闭方法并检查返回代码(使用getReportnCode()方法)。

堵彬彬
2023-03-14

监听Shell上的SWT.关闭

这应该有助于:

public static void main(String[] args)
{
    Display display = new Display();
    final Shell shell = new Shell(display);
    shell.addListener(SWT.Close, new Listener()
    {
        public void handleEvent(Event event)
        {
            int style = SWT.APPLICATION_MODAL | SWT.YES | SWT.NO;
            MessageBox messageBox = new MessageBox(shell, style);
            messageBox.setText("Information");
            messageBox.setMessage("Close the shell?");
            event.doit = messageBox.open() == SWT.YES;
        }
    });

    shell.pack();
    shell.open();
    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

它将提示用户验证该决定。

 类似资料:
  • 作为Java的新手,多年的iOS和。NET的经验,我发现这是非常令人困惑。我想要的是一个非常简单的对话框(从主窗口调用),带有OK和Cancel按钮。单击“确定”时,它会执行一些操作,然后关闭对话框。单击“取消”时,它只会取消对话框。 然而,使用SWT shell对话框类来实现这一点并不明显。如何获得一个按钮来关闭对话框,并将执行返回到主窗口?

  • 我有一个关于右上角红色按钮关闭应用程序(Windows 7)的快速问题...我在Java中编程了ServerSocket,但当我使用此关闭按钮关闭应用程序时,服务器会继续运行...我想捕获此事件(如果可能),并确保当按下此按钮时,包括ServerSocket在内的整个程序都已关闭。 这是一段代码,我认为我必须修改以捕捉这一事件。。。 任何帮助都将不胜感激。。。谢谢

  • 问题内容: 你好, 我正在使用Java Swing,并且想在单击按钮时关闭一个窗口。我不知道使用动作侦听器作为执行此操作的最佳方法,但是目前我正在编译错误,因此它一定是不正确的。 这是我的代码: 我遇到的问题是列出的最后一个类,它实际上只是关闭当前窗口,因此再次显示主菜单屏幕。我需要在该类中创建的静态引用。但是将其更改为静态是无效的修饰符吗? 我该如何解决? 问题答案: 试试这个 并发送一个实例给

  • 我想在JavaFX中创建特定的组件。在 onClick 事件后显示 poupup 的按钮。 情景: > < li> 我们单击按钮 弹出显示下面的按钮(如图片上所示)

  • 我需要通过控制器中的代码关闭当前的fxml窗口 我知道stage.close()或stage.hide()在fx中这样做 我们将非常感谢所有的帮助。谢谢!

  • 问题内容: 最终编辑: 我在关闭pyplot窗口这一主题上发现,实际上可能不应该使用pyplot完成它。SRK给出了一个很好的示例,说明如何处理将在下面的答案中更新的图。我也偶然发现了如何将pyplot图放到Tkinter窗口中,并且Tkinter比pyplot更擅长打开和关闭窗口。这里是怎样把一个pyplot情节变成Tk的窗口, /最终编辑 我希望能够显示多个图,然后能够从某些代码输入中分别关闭