gpt4 book ai didi

java - 关闭 Swing 模式弹出窗口

转载 作者:行者123 更新时间:2023-12-01 11:29:29 27 4
gpt4 key购买 nike

当我尝试隐藏或关闭作为模式调用的弹出对话框时,组件会按其应有的方式消失,但指示窗口模式的灰色屏幕仍然可见,直到在此窗口区域发生第一次鼠标单击事件。

WebPopup darkenScreen = new WebPopup(PopupStyle.gray);
ContructPopUP(darkenScreen);
darkenScreen.showPopupAsModal(this);

以及弹出设置方法:

private void ContructPopUP(WebPopup darkenScreen)
{
final JFrame mFrame = this;
final WebTextField inputTime = new WebTextField("(sekundy)");
darkenScreen.setLayout(new GridLayout(3, 1));
darkenScreen.add(new WebLabel("Podaj czas : "));
darkenScreen.add(inputTime);
darkenScreen.add(new WebButton(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
int secTime = Integer.parseInt(inputTime.getText());
if (secTime > 0 && secTime < 7200)
{
Connection.TurnOff(secTime);
System.out.println("clicked!");
}

darkenScreen.hidePopup();
}
}));
}

当作为普通弹出窗口调用时,所有内容都会以缩进形式消失。我尝试了很多方法来关闭它,但都没有成功。

在单击按钮并执行 popup.hide 之前: Before popup.hide()

完成后:

after

最佳答案

假设您正在使用 WebLaF library ,我认为您的问题可能是由 PopupLayer.hidePopup 引起的方法。此方法由 WebPopup.hidePopup 方法调用,并且应该隐藏模式弹出窗口,但正如您所注意到的,灰色层不会消失。如果你看PopupLayer.hideAllPopups ,在此方法中所有弹出窗口都会被删除,并且弹出层将变得不可见。我没有使用 WebLaF 库的经验,它感觉很黑客,但您也许可以通过自己隐藏弹出层来解决您的问题:

import com.alee.laf.button.WebButton;
import com.alee.laf.label.WebLabel;
import com.alee.laf.text.WebTextField;
import com.alee.managers.popup.PopupStyle;
import com.alee.managers.popup.WebPopup;

import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class ModalWebPopup {
public static void main(final String[] arguments) {
new ModalWebPopup().launchGui();
}

private void launchGui() {
final JFrame frame = new JFrame("Stack Overflow: modal WebPopup");
frame.setBounds(100, 100, 800, 600);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

final JPanel panel = new JPanel();
final JButton button1 = new JButton("Show a modal WebPopup");
panel.add(button1);
frame.getContentPane().add(panel);

button1.addActionListener(actionEvent -> {
final WebPopup darkenScreen = new WebPopup(PopupStyle.gray);
constructPopup(darkenScreen);
darkenScreen.showPopupAsModal(frame);
});

frame.setVisible(true);
}

private void constructPopup(final WebPopup darkenScreen) {
//final JFrame mFrame = this;
final WebTextField inputTime = new WebTextField("(sekundy)");
darkenScreen.setLayout(new GridLayout(3, 1));
darkenScreen.add(new WebLabel("Podaj czas : "));
darkenScreen.add(inputTime);
darkenScreen.add(new WebButton(actionEvent -> {
int secTime = Integer.parseInt(inputTime.getText());
if (secTime > 0 && secTime < 7200) {
//Connection.TurnOff(secTime);
System.out.println("clicked!");
}

System.out.print("Hide the modal WebPopup ");

// Normal way to hide the popup:
//darkenScreen.hidePopup();

System.out.println("by making the parent of the WebPopup invisible.");

// Alternative way to hide the popup:
darkenScreen.getParent().setVisible(false);

// Compare the PopupLayer.hideAllPopups and PopupLayer.hidePopup methods
// for more details.
}));
}
}

关于java - 关闭 Swing 模式弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30531993/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com