Почему setVisible не работает? - PullRequest
       33

Почему setVisible не работает?

2 голосов
/ 25 января 2012

У меня есть свинг GUI с макетом границы.в NORTH я добавил какой-то компонент.Мой компонент метки, который имеет значок GIF, невидим lblBusy.setVisible(false);, позже кнопка делает его видимым, как показано ниже.Почему не появляется?

btnDownload.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    lblBusy.setVisible(true);
                    btnCancel.setEnabled(true);
                }
            });

            download = new Download(txtSource.getText(), new File(txtDestination.getText()), textAreaStatus);
            download.start();
            lblBusy.setVisible(false);
        }
    });

Ответы [ 3 ]

3 голосов
/ 25 января 2012

1) это EventDispatchThread связанная проблема, EDT вполне гарантирует, что все изменения в GUI будут сделаны в один момент

2) вы вызвали ActionPerformed из JButton и до тех пор, пока все события не закончатся, ваш GUI должен быть заморожен или не отвечает, то же самое для JButton и JLabel в вашем случае

3) лучше было бы перенаправить чтение содержимого File на задание Backgroung, например SwingWorker или Runnable#Thread, тогда JButton и JLabel будут изменены, и GUI будет во время Фонового задания, ответственного за Мышь или KeyBoard

или

4) грязный хак, разделенный на два разделенных Action, задерживается на javax.swing.Timer, но в этом случае снова, пока все события не закончатся, ваш графический интерфейс будет зависать или будет не отвечать

2 голосов
/ 25 января 2012

Мне кажется, что вы пишете lblBusy.setVisible(true); и после этого lblBusy.setVisible(false); в методе mouseClicked ().Так как вы хотели сделать его видимым одним нажатием кнопки, вы не используете только lblBusy.setVisible(true);, вместо того, чтобы использовать оба.

Вы можете позвонить lblBusy.setVisible(false); с конца вашего класса загрузки, хотя, как только он закончил делать то, что он делает.

С уважением

2 голосов
/ 25 января 2012

Скорее всего, потому что GUI был упакован в то время, когда метка не была видна, поэтому для ее отображения не было местаДля чего-то более определенного, отправьте SSCCE.

...