0

インターネットから画像をロードする JFrame を作成しています。私はそれを機能させていますが、このJFrameの問題は、多くの写真があるため、ロードにかなりの時間がかかることです. これで問題ありませんが、画像が読み込まれていることをユーザーに示したいと思います。何らかの理由で、読み込み中の JFrame に JPanel を表示できません。これが一般的なエラーであることはわかっており、多くの修正を試みましたが、どれも機能しません。コードは次のとおりです。

final JFrame weatherLoadPop=new JFrame("Loading weather...");
weatherLoadPop.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
weatherLoadPop.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e) {
      weatherPop.dispose();
   };
});
weatherLoadPop.setResizable(false);
weatherLoadPop.setBounds(100,50,225,100);
JPanel weatherLoadPanel=new JPanel();
weatherLoadPanel.setBackground(Color.RED);

weatherLoadPanel.setPreferredSize(new Dimension(225,100));
JLabel weatherLoadLabel=new JLabel("Loading...0%");
weatherLoadPanel.add(weatherLoadLabel);
weatherLoadPop.add(weatherLoadPanel);
weatherLoadPop.pack();
weatherLoadPop.validate();
weatherLoadPop.setVisible(true);

pack() と validate() を正しく使用しているかどうかわかりません。私はそれらを頻繁に使用しません。いずれにせよ、それらを削除しても役に立ちません。私にとって、この問題の最も奇妙な部分は、画像をロードする JFrame は美しく機能するのに、はるかに単純な JFrame のロードはうまくいかないことです。

助けてくれてありがとう。

4

1 に答える 1

1

ここでは正常に機能しています。たぶん、私たちがテストできるsscceを提供する必要がありますか?

イベントリスナーを変更して、weatherPopではなくweatherLoadPopを破棄し、コードをテストクラスに追加する必要がありました。

package test;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test {

    public static void main(String[] args) {
        final JFrame weatherLoadPop = new JFrame("Loading weather...");
        weatherLoadPop.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        weatherLoadPop.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                weatherLoadPop.dispose();
            }
        ;
        });
        weatherLoadPop.setResizable(false);
        weatherLoadPop.setBounds(100, 50, 225, 100);
        JPanel weatherLoadPanel = new JPanel();
        weatherLoadPanel.setBackground(Color.RED);

        weatherLoadPanel.setPreferredSize(new Dimension(225, 100));
        JLabel weatherLoadLabel = new JLabel("Loading...0%");
        weatherLoadPanel.add(weatherLoadLabel);
        weatherLoadPop.add(weatherLoadPanel);
        weatherLoadPop.pack();
        weatherLoadPop.validate();
        weatherLoadPop.setVisible(true);
    }
}

そして私は得ています:

読み込んでいます...

使用:

java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)
于 2012-07-05T15:05:38.330 に答える