Java: всплывающее окно не всегда видно - PullRequest
1 голос
/ 09 сентября 2011

Я использую всплывающее окно для отображения прогресса обновления. Я поставил полупрозрачную панель над главным окном для эффекта. В большинстве случаев всплывающее окно видно, но на некоторых компьютерах это не так. Кажется, это связано с конкретными компьютерами. Кто-нибудь знает решение или есть лучший способ реализовать это?

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

Ответы [ 2 ]

3 голосов
/ 09 сентября 2011

Убедитесь, что:

  • Диалоговое окно хода выполнения создано и обновлено в EDT.
  • Долгосрочное задание завершено вне EDT.
2 голосов
/ 09 сентября 2011

считают, что было бы лучше искать / использовать не украшенный модал JDialog или JWindow (по умолчанию без декорации) вместо JPopup

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...