1

JDesktopPane を含む JFrame があり、JDesktopPane 内で、コンストラクターを使用して JInternalFrame を起動します。(認証ユーザーのようなアプリで、テキストボックスユーザーとテキストボックスパスがあります)

次のように内部を起動します。

MyInternalFrame internalF = new MyInternalFrame();
desktopPane.add(internalF);

私は試してみます:

internalF.setVisible(true);
internalF.setSelected(true);
desktopPane.getDesktopManager().activateFrame(internal);
desktopPane.setSelectedFrame(internal);

デフォルトで選択されている JInternalFrame を起動するにはどうすればよいですか? アプリケーションを実行すると、内部フレームがバックグラウンドのようになり、選択されておらず、フォーカスされていません。

4

2 に答える 2

1

内部フレームの使用方法のJavaチュートリアルをご覧ください。それは良い例を示し、以下を使用します。

protected void createFrame() {
    MyInternalFrame frame = new MyInternalFrame();
    frame.setVisible(true);
    desktop.add(frame);
    try {
        frame.setSelected(true);
    } catch (java.beans.PropertyVetoException e) {}
}
于 2010-11-03T14:50:48.183 に答える
0

デスクトップが作成され、メイン フレームが表示された後で、内部フレームを表示することができます。その場合、フレームはデフォルトで選択されます。

だから、あなたができることの一例:

  1. メインフレームの作成
  2. デスクトップの作成
  3. 内部フレームを作成するが、表示しない
  4. 内部フレームで visible を true に設定するスレッドを開始しますが、スレッドはデスクトップが表示されるまで待機できます
  5. メインフレームを見えるようにする
  6. スレッドで internalFrame.setVisible(true) を呼び出し、スレッドを終了します。

このような場合、内部フレームがデスクトップに表示され、必要に応じて選択されます。

スレッドを使用せずにメイン フレームのイベントにハンドラーを記述する他の解決策を考えるかもしれません。いずれにせよ、表示後に内部フレームを表示するには、メイン フレームを含むデスクトップが表示された後に表示する必要があります。

使用できる例を次に示します。

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.HeadlessException;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;


public class Main extends JFrame {

    private static final long serialVersionUID = 1L;

    private Internal internalFrame;

    public Main() throws HeadlessException {
        super("Internal Frame Test");

        setBounds(10, 10, 600, 400);

        setDefaultCloseOperation(EXIT_ON_CLOSE);

        this.setLayout(new BorderLayout());

        add(createDesktop(), BorderLayout.CENTER);

        addWindowListener(new WindowAdapter() {
            public void windowOpened(WindowEvent e) {
                internalFrame.setVisible(true);
            }
        });

        setVisible(true);
    }

    private Component createDesktop() {
        JDesktopPane d = new JDesktopPane();

        internalFrame = new Internal("first");
        d.add(internalFrame);

        return d;
    }

    public static class Internal extends JInternalFrame {

        private static final long serialVersionUID = 1L;

        public Internal(String title) {
            super(title);
            setBounds(10, 10, 300, 100);
        }
    }

    public static void main(String[] a) {
        new Main();
    }
}
于 2010-11-03T15:13:58.767 に答える