Фоновое изображение не отображается после JOptionPane.showMessageDialog - PullRequest
1 голос
/ 01 февраля 2012

Моя проблема в том, что когда я создаю диалог сообщения, используя

JOptionPane.showMessageDialog( ... )

В приложении, которое отображает JPanel, который рисует изображение в качестве фона (взято из: java swing: как добавить изображение в jpanel ), изображение backgrund не отображается, поэтому я должен сверните и разверните приложение, чтобы вернуть фоновое изображение.

Пока что я могу вернуть фоновое изображение, только сделав что-то вроде этого:

app.getApplication().getMainFrame().repaint();

но это работает только после закрытия диалога сообщений.

Есть идеи?

1 Ответ

3 голосов
/ 01 февраля 2012

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

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;    
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;

public class ImageTest extends JPanel 
{
    private BufferedImage image;

    private void displayGUI()
    {
        JFrame frame = new JFrame("Image Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);

        try
        {
            setImage(new URL("http://gagandeepbali.uk.to/" +
                "gaganisonline/images/planetbackground.jpg"));
        }
        catch(MalformedURLException mue)    
        {
            mue.printStackTrace();
        }


        frame.setContentPane(this);
        frame.pack();
        frame.setVisible(true);        
        JOptionPane.showMessageDialog(frame, 
                                "I am working.", 
                                "Image Working ?", 
                                JOptionPane.QUESTION_MESSAGE);
    }

    private void setImage(URL path)
    {
        try
        {       
            System.out.println(path);
            image = ImageIO.read(path);
        }
        catch(IOException ioe)
        {
            ioe.printStackTrace();
        }
    }

    @Override
    public Dimension getPreferredSize()
    {
        return (new Dimension(image.getWidth(), image.getHeight()));
    }

    @Override   
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, this);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new ImageTest().displayGUI();
            }
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...