4

Swing を使用した MDI アプリケーションの設計に問題があります。

JDesktopPane と JInternalFrames の実装に問題はありません。私の質問はもう少し具体的です。これが私のベース コンテナ フレームの概要です。

package applicationGUI;

import javax.swing.JFrame;

public class DesktopContainer extends JFrame{
/* Fields */

/* Constructors */
    public DesktopContainer(){
        setContentPane(new Desktop());
        setJMenuBar(AppllicationMenuBar.getMenuBar());

    }
/* Public Methods */
    public Desktop getDesktop(){
        return (Desktop)getContentPane();
    }
}

そして私のデスクトップ:

public class Desktop extends JDesktopPane{}

DesktopContainer のコンテンツ ペインとしてデスクトップを設定していることに注意してください。私が欲しいのは、JPanels をデスクトップ (具体的には、JMenuBar のすぐ下) に追加できるようにすることです。残念ながら、私はこれを行うことができませんでした。そして最後に、ここに私の質問があります:

1-) JPanel オブジェクトを JDesktopPane に描画できますか? 私はいくつか掘り下げました.JLayeredPane機能と関係があると思いますが、残念ながら実装できませんでした.

2-) JPanel オブジェクトを JDesktopPane に描画できない場合、どうすればやりたいことを実行できますか?アドバイスはありますか? 「JFrameに2つのJPanelを追加し、必要に応じて一番上のものを使用し、JDesktopPaneを下の2番目のJPanelに描画する」と考えました。これは良いアプローチですか?

回答ありがとうございます..

4

1 に答える 1

6

JPanel を描画し、JDesktopPane でイベントを受け取ることができます

public class DesktopContainer extends JFrame { 
/* Constructors */
    public DesktopContainer(){
        setContentPane(new Desktop());
        setJMenuBar(createJMenuBar());

        APanel a = new APanel();
        a.setBounds(0, 0, 200, 200);
        a.setVisible(true);
        getDesktop().add(a);
    }   
    ....
}

class Desktop extends JDesktopPane {
}

class APanel extends JPanel { 
    public APanel() { 
        setLayout(new BorderLayout());
        add(new JButton("Hello stackoverflow"));
    }
}

それは正常に動作します。JInternalFrame が必要なため、JPanel で setVisible(true)、setBounds() を呼び出す必要があります。

于 2009-09-25T04:05:06.597 に答える