1

JDialogポップアップを表示するために 使用した Swing アプリケーションを開発しました。

altしかし、問題は+を押すtabと、アプリケーションではなくダイアログのみが表示されることです。ダイアログのモーダルも試しました。

私の要件は、アプリケーションでダイアログが開いたときにalt+tabキーを押すと、別の X アプリケーションに切り替わり、もう一度alt+tabキーを押すと、アプリケーションで開いたダイアログが表示されることです。現在、ダイアログが開いていることを示していますが、アプリケーションではありません。

を使用してこの要件を満たすにはどうすればよいJDialogですか?

ここにサンプルコードがあります

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
*$Id$
*/
public class Main
{
    public static void main(final String[] args)
    {
        final JFrame jFrame = new JFrame();
        jFrame.setSize(300, 200);
        final JPanel panel = new JPanel();
        final JButton button = new JButton("click here to open dialog");
        final ProductDialog dialog = new ProductDialog();
        button.addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(final ActionEvent e)
            {
                dialog.setVisible(true);
            }
        });
        panel.add(button);
        jFrame.add(panel);
        jFrame.setVisible(true);
    }
}

そして、ダイアログは以下のとおりです

import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class ProductDialog extends JDialog
{
    private static final long serialVersionUID = 1L;

    public ProductDialog()
    {
        this.add(new JPanel().add(new JLabel("Test")));
        this.setSize(150, 100);
        this.setModal(true);
        this.setLocationRelativeTo(null);
    }
}

これは、小さなアプリの視覚効果のイメージです。現在、Windows 7でセキュリティ ダイアログをalt+で表示しているアプリです。tabそれ自体はすでに画面上に表示されていますが、小さいアイコンに表示されるのはセキュリティ ダイアログ (左上) だけです。

ここに画像の説明を入力

4

2 に答える 2

2

ダイアログの親ウィンドウをアプリケーションの に設定する必要がありFrameます。

小さな例:

import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class TestDialog {

    protected void initUI() {
        JFrame frame = new JFrame(TestDialog.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final JButton button = new JButton("Click me to open dialog");
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                Window parentWindow = SwingUtilities.windowForComponent(button);
                JDialog dialog = new JDialog(parentWindow);
                dialog.setLocationRelativeTo(button);
                dialog.setModal(true);
                dialog.add(new JLabel("A dialog"));
                dialog.pack();
                dialog.setVisible(true);
            }
        });
        frame.add(button);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestDialog().initUI();
            }
        });
    }
}
于 2012-12-10T13:09:11.057 に答える
0

以下のように、親フレームをダイアログに渡しました。

final ProductDialog dialog = new ProductDialog(jFrame);

そして
、親ウィンドウを引数としてスーパークラスのコンストラクターを呼び出すの下のように設定し、ダイアログのモダリティタイプを設定すると、うまくいきます。

import java.awt.Dialog;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class ProductDialog extends JDialog
{
    private static final long serialVersionUID = 1L;

    public ProductDialog(final JFrame jFrame)
    {
        super(jFrame);
        this.add(new JPanel().add(new JLabel("Test")));
        this.setSize(150, 100);
        this.setModal(true);
        this.setModalityType(Dialog.ModalityType.DOCUMENT_MODAL);
    }
}

これは、テスト用に作成した単なるサンプル例です。

于 2012-12-11T07:30:12.930 に答える