1

ローダー gif 画像といくつかのテキストを含むフローティング ダイアログ ボックスを作成しようとしました。私は次のクラスを持っています:

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 はダイアログ ボックスに表示されません。

このコードで何が間違っていましたか?

どうもありがとう。

4

2 に答える 2

4

画像は通常、「リソース」ソース フォルダに配置されます。

ここに画像の説明を入力
バイトストリームとしてアクセスされ、

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

モーガン・フリーマンをプロデュース。

ここに画像の説明を入力

于 2013-02-10T19:01:48.797 に答える
0

を に追加しImageIconてからcontentPaneJLabelに追加し、その後にコンストラクターでandを追加します。JLabelJDialogthis.validatethis.repaint

デバッグするには、実際のコードが必要になることがありますが、それがなければ、これらは単なる仮定に基づく提案です

于 2013-02-10T19:01:47.263 に答える