1

プログラムのロード中にポップアップするスプラッシュ ウィンドウがあります。このスプラッシュ ウィンドウsetAlwaysOnTop(true)では、私が保持したいメソッド を使用しています。

この問題は、プログラムの別の部分が JOptionPane をポップアップして、ソフトウェアを更新する必要があることをユーザーに通知するときに発生します。Linux では、これはスプラッシュ ウィンドウの前に表示されますが、Windows では後ろに表示され、ユーザーにはほとんど見えず、30 分間座っていると、まだロードされていない理由がわかるまで 1 時間もかかります。

実装したい修正は、次のいずれかです

  • JOptionPane を強制的に画面の別の場所にポップアップさせるか
  • JOptionPane が表示される場所を変更して、スプラッシュ画面の上部または下部に配置します。

これを行うことができる唯一の関数はsetLocationRelativeTo(Component myComponent)メソッドです。しかし、これは良いことではありません。なぜなら、相対的なものは何もないからです (そして何も存在しません!)。

このようなことは可能ですか?もしそうなら、どうすればそれを行うことができますか?

これが私のSSCCEです(回答のSeniorJDのコードに基づいています):

public class Main {
    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                final Splash splash =new Splash();
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                final Frame frame = new Frame("Frame");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
                splash.dispose();
            }
        });
    }
}

@SuppressWarnings("serial")
public class Frame extends JFrame implements ActionListener{
    Frame(String title){
        super(title);
        JButton button = new JButton("Button");
        add(button);

        setAlwaysOnTop(true);
        setSize(500, 500);
        setLocationRelativeTo(getParent());
        setAlwaysOnTop(true);
        button.addActionListener(this);
        actionPerformed(null);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        JOptionPane optionPane = new JOptionPane("Option Pane");
        optionPane.showMessageDialog(this, "Message: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tristique gravida congue."); 
    }
}
    @SuppressWarnings("serial")
public class Splash extends JFrame {
    public Splash() throws HeadlessException {
        setAlwaysOnTop(true);
        setUndecorated(true);
        setVisible(true);
        setSize(600, 450);
        setLocationRelativeTo(getParent());
    }
}

これは、ユーザーが見ている動作を多かれ少なかれエミュレートします。JOptionPane をスプラッシュ画面の外に移動するにはどうすればよいですか?

4

2 に答える 2

0

もしも

setLocationRelativeTo(null);

Windowsでは何らかの理由でうまく表示されません.サイズをスプラッシュスクリーンよりもわずかに大きく設定して、より目立つようにするか、SeniorJDが提案したようにします.

于 2013-06-25T10:54:34.293 に答える