【问题标题】:Java: Popup not always visibleJava:弹出窗口并不总是可见
【发布时间】:2011-09-09 19:53:29
【问题描述】:

我使用 Popup 来显示更新进度。我在主窗口上方放置了一个半透明面板以获得效果。在大多数情况下,弹出窗口是可见的,但在某些计算机上却不是。它似乎与特定的计算机有关。有谁知道解决方案或有更好的方法来实现它?

//Disable main components
tabs.setEnabledAt(0, false);
tabs.setEnabledAt(1, false);
comPorts_CB.setEnabled(false);
getinfo_B.setEnabled(false);
//Add effect panel
pop_effect_panel = new JPanel();
pop_effect_panel.setBackground(new Color(255, 255, 255, 192));
pop_effect_panel.setBounds(0, 0, 1000, 1000);
pop_effect_panel.setLayout(null);
pop_effect_panel.setOpaque(true);
getContentPane().add(pop_effect_panel);
getContentPane().setComponentZOrder(pop_effect_panel, 0);
getContentPane().setEnabled(false);
pop_effect_panel.invalidate();
//Create pop-up panel
pop_panel = new JPanel();
pop_panel.setBackground(BACKGROUND_COLOR);
pop_panel.setSize(300, 300);
pop_panel.setLayout(null);
pop_panel.setOpaque(true);
pop_panel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
pop_progress_TA = new NonSelectableTextArea();
pop_progress_TA.setBounds(2, 2, 296, 268);
pop_progress_TA.setBackground(BACKGROUND_COLOR);
pop_panel.add(pop_progress_TA);
pop_progress_bar = new JProgressBar();
pop_progress_bar.setBounds(1, 270, 240, 28);
pop_progress_bar.setValue(0);
pop_progress_bar.setStringPainted(true);
pop_progress_bar.setString("");
pop_panel.add(pop_progress_bar);
pop_ok_B = new JButton("OK");
pop_ok_B.setBounds(241, 270, 57, 28);
pop_ok_B.setEnabled(false);
pop_panel.add(pop_ok_B);
final Popup popup = PopupFactory.getSharedInstance().getPopup(getContentPane(), pop_panel, 100, 250);
popup.show();
pop_ok_B.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        popup.hide();
        //Remove effect panel
        getContentPane().remove(pop_effect_panel);
        getContentPane().validate();
        //Enable main components
        tabs.setEnabledAt(0, true);
        tabs.setEnabledAt(1, true);
        comPorts_CB.setEnabled(true);
        getinfo_B.setEnabled(true);
    }
});
pop_progress_TA.requestFocusInWindow();

【问题讨论】:

  • 顺便说一句 1) 不要使用setLayout(null)。了解如何使用布局。 2) 请考虑发布SSCCE 而不是不可编译的代码sn-ps。
  • 与您的问题无关:请学习Coding Conventions 让您的代码更具可读性。 pop_ok_B 不是变量的命名方式。
  • 积分! (这是我的第一个 Java 应用)

标签: java swing


【解决方案1】:

确保:

  • 在 EDT 上创建和更新进度对话框。
  • 长时间运行的任务已在 EDT 之外完成。

【讨论】:

  • “我都做过……”(尖锐地)SSCCE 会让这一点显而易见。
【解决方案2】:

考虑一下,最好寻找/使用未装饰的 Modal JDialog or JWindow(默认未装饰)而不是 JPopup

【讨论】:

  • 是否可以将其锁定在我的应用程序(它是一个小程序)上而不显示标题栏等?
  • 有人知道这是否可能吗?
  • 我已经使用 JWindow 实现了,但是如何设置位置取决于小程序位置。如果我选择浏览器窗口,JWindow 就会消失在浏览器窗口后面。 setAlwaysOnTop(true) 是我唯一的选择吗?
  • @thomas.fogh more in this thread 1) 屏幕上的位置 stackoverflow.com/questions/7306073/… 2) 如果您只需要从此窗口中的操作,则可以 setModal(true),如果不需要,则 setAlwaysOnTop(true) 是也不错
  • 我已将 JWindow 所有者设置为浏览器框架,并且我几乎拥有我想要的行为,除了当我在浏览器中的选项卡之间切换时 JWindow 仍然可见。如果我的小程序不再可见,我可以让一个 Listener 通知我吗?
猜你喜欢
  • 2011-12-20
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多