2013-02-10 1 views
1

Я попытался создать плавающее диалоговое окно, содержащее изображение gif загрузчика и некоторый текст. У меня следующий класс:Как добавить ImageIcon в JDialog?

public class InfoDialog extends JDialog { 
    public InfoDialog() { 
     setSize(200, 50); 
     setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); 
     setUndecorated(true); 
     setLocationRelativeTo(null); 

     URL url = InfoDialog.class.getClassLoader().getResource("loader.gif"); 
     ImageIcon loading = new ImageIcon(url); 
     getContentPane().add(new JLabel("Logging in ... ", loading, JLabel.CENTER)); 
    } 
} 

Однако, когда я называю:

InfoDialog infoDialog = new InfoDialog() 
    infoDialog.setVisible(true); 

Пустое отображается диалоговое окно. ImageIcon и Label не отображаются в диалоговом окне.

Что я сделал не так в этом коде?

Большое спасибо.

+2

Если вы прекратите добавление .gif это, по крайней мере показать текст? Исправлены ли какие-либо исключения? Это выглядит хорошо для меня. – BeRecursive

+0

Вы показываете infoDialog в EDT? –

+0

Также рассмотрите возможность загрузки изображения на [background] (http://stackoverflow.com/a/4530659/230513). – trashgod

ответ

0

Я хотел бы добавить ImageIcon к JLabel, а затем добавить к JLabelJDialog ContentPane с последующим this.validate и this.repaint в конструкторе.

Для отладки иногда требуется фактический код, без которого это только предложения, основанные на предположениях

+0

Зачем «validate()» и «repaint») 'before' setVisible() '? К сожалению, я не вижу 'pack()'. – trashgod

+0

Я предположил, что код существует. Я просто упомянул шаги – Horizon

4

изображения, как правило, помещены в «ресурс» исходной папки,

enter image description here
, а затем обращались как байт,

package com.foo; 

import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JDialog; 
import javax.swing.JLabel; 
import javax.swing.SwingUtilities; 

public class Demo 
{ 
    private static final String IMAGE_URL = "/resource/bar.png"; 

    public static void main(String[] args) 
    { 
     createAndShowGUI(); 
    } 

    private static void createAndShowGUI() 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       try 
       { 
        JDialog dialog = new JDialog();  
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
        dialog.setTitle("Image Loading Demo"); 

        dialog.add(new JLabel(new ImageIcon(ImageIO.read(getClass().getResourceAsStream(IMAGE_URL))))); 

        dialog.pack(); 
        dialog.setLocationByPlatform(true); 
        dialog.setVisible(true); 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
} 

для производства Morgan Freeman.

enter image description here

+1

+1 для 'ImageIO.read()', но 'ImageIcon' может напрямую использовать' URL', возвращаемый 'getResource()'. – trashgod

+1

@trashgod, +1, но я хотел использовать 'getResourceAsStream' – mre

 Смежные вопросы

  • Нет связанных вопросов^_^