Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:弹出窗口不总是可见的_Java_Swing - Fatal编程技术网

Java:弹出窗口不总是可见的

Java:弹出窗口不总是可见的,java,swing,Java,Swing,我使用弹出窗口显示更新进度。我在主窗口上方放置了一块半透明的面板以达到效果。在大多数情况下,弹出窗口是可见的,但在某些计算机上却不可见。它似乎与特定的计算机有关。是否有人知道解决方案或有更好的方法来实现这一点 //Disable main components tabs.setEnabledAt(0, false); tabs.setEnabledAt(1, false); comPorts_CB.setEnabled(false); getinfo_B.setEnabled(false); /

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

//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();

考虑到这将更好地寻找/使用未修饰的模态(通过defalut unde装饰)而不是JPopup

考虑到这将更好地寻找/使用未修饰的模态(通过defalut unde装饰)而不是JPopup

确保:

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

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

BTW 1)不要使用
setLayout(null)
。学习如何使用布局。2)请考虑发布一个非编译代码片段。与您的问题无关:请学会让代码更可读。code>pop_ok_B不是变量的命名方式。得分!(这是我的第一个Java应用程序)顺便说一句,不要使用
setLayout(null)
。学习如何使用布局。2)请考虑发布一个非编译代码片段。与您的问题无关:请学会让代码更可读。code>pop_ok_B不是变量的命名方式。得分!(这是我的第一个Java应用)“我两个都做了…”(明确地说)SSCCE会让这一点变得明显。“我两个都做了…”(明确地说)SSCCE会让这一点变得明显。是否可以在我的应用程序(它是一个小程序)上锁定它,而不显示标题栏等?有人知道这是否可能吗?我使用JWindow实现了,但是如何设置位置取决于小程序的位置。如果选择浏览器窗口,JWindow将消失在浏览器窗口后面。设置AlwaysOnTop(true)是我唯一的选择吗?@thomas.fogh more在此线程中1)屏幕上的位置2)如果需要此窗口中的操作,可以设置模态(true),如果不需要,则设置AlwaysOnTop(true)很好我已经将JWindow所有者设置为浏览器框架,并且我几乎拥有了我想要的行为,只是当我在浏览器中的选项卡之间切换时,JWindow仍然可见。我是否可以让一个监听器让我知道我的小程序是否不再可见?是否可以在我的应用程序(它是一个小程序)上将其锁定到位,并且不显示标题栏等?是否有人知道这是可能的?我已使用JWindow实现,但如何设置位置取决于小程序的位置。如果选择浏览器窗口,JWindow将消失在浏览器窗口后面。设置AlwaysOnTop(true)是我唯一的选择吗?@thomas.fogh more在此线程中1)屏幕上的位置2)如果需要此窗口中的操作,可以设置模态(true),如果不需要,则设置AlwaysOnTop(true)很好我已经将JWindow所有者设置为浏览器框架,并且我几乎拥有了我想要的行为,只是当我在浏览器中的选项卡之间切换时,JWindow仍然可见。如果我的小程序不再可见,是否可以让侦听器通知我?