繁体   English   中英

如何将一个Java应用程序插入另一个应用程序的选项卡式窗格中

[英]How to insert one Java Application into the tabbed pane of another application

我的教授要求我创建一个JSwing应用程序,该应用程序具有三个选项卡式窗格,每个窗格都包含一个游戏。

根据zetcode.com网站 ,我为三种不同的游戏(Snake,MineSweaper和Packman)创建了三种不同的Java应用程序。 每个应用程序都包含一个主类,其中包含JFrame和main方法,以及另一个类(扩展了JPanel)以创建游戏板并对其进行午餐。

这是一个例子:

public class Minesweeper_Main extends JFrame {
    JFrame jfrm;
    Container pane;
    JLabel statusbar;

    public Minesweeper_Main () {
        jfrm= new JFrame("Minesweeper");
        jfrm.setSize(500,700);
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jfrm.setLocationRelativeTo(null);
        jfrm.setResizable(false);

        pane=jfrm.getContentPane();

        statusbar = new JLabel("");
        add(statusbar, BorderLayout.SOUTH);
        add(new MineSweeper_Board(statusbar));

        jfrm.setVisible(true);
    }   
    public static void main(String[] args) {
        new Minesweeper_Main ();
    }
}

public class MineSweeper_Board extends JPanel {
……..
    public MineSweeper_Board(JLabel statusbar) {   
        this.statusbar = statusbar;
        ………
        setDoubleBuffered(true);
        addMouseListener(new MinesAdapter());
        newGame();
    }
……..
}

现在,我想创建一个新的Java应用程序(Swing Interface),其中包含三个选项卡式窗格,每个选项卡可容纳或调用一个特定的游戏。 不幸的是,我一直都出错,或者得到空白标签。

新的JSwing应用程序的代码如下:

public class MF_GameHub extends JFrame {
    JFrame jfrm;
    Container pane;
    JTabbedPane jtp;
    public MF_GameHub(){
        jfrm= new JFrame("GameHub");
        jfrm.setSize(500,700);
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jfrm.setLocationRelativeTo(null);
        jfrm.setResizable(false);

        pane=jfrm.getContentPane();

       ………

        jtp = new JTabbedPane();
        jtp.addTab("MineSweeper", new MineSweeper());
        jtp.addTab("PacMan", new PacMan());
        jtp.addTab("Snake", new Snake());     

        pane.add(jtp);

        jfrm.setVisible(true);
    }  
    public static void main(String[] args) {
        new MF_GameHub();
    }
}
class MineSweeper extends JPanel {
    //I DO NOT KNOW HOW TO CALL THE OTHER JAVA APPLICATION FROM HERE
}

class PacMan extends JPanel {
    //I DO NOT KNOW HOW TO CALL THE OTHER JAVA APPLICATION FROM HERE
}

class Snake extends JPanel {
    //I DO NOT KNOW HOW TO CALL THE OTHER JAVA APPLICATION FROM HERE
}

如何在一个应用程序中集成所有三个游戏?

在这种情况下,我将拆分JFrameJFramecontentPane 之后,您只需要使用contentpane并将其导入到您想要的应用中即可!

您的代码示例:

public class Minesweeper_Main extends JFrame {
    Container pane;
    JLabel statusbar;

    public Minesweeper_Main (JPanel contentPane) {
        super("Minesweeper");
        setSize(500,700);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setResizable(false);

        setContentPane(contentPane); // << Add

        setVisible(true);
    }   
    public static void main(String[] args) {
        new Minesweeper_Main (new MineSweeper_Pane()); // << Changed
    }
}

public class MF_GameHub extends JFrame {
    Container pane;
    JTabbedPane jtp;

    public MF_GameHub(){
        super("GameHub");
        setSize(500,700);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setResizable(false);

        pane=getContentPane();

       ………

        jtp = new JTabbedPane();
        jtp.addTab("MineSweeper", new MineSweeper_Pane());
        jtp.addTab("PacMan", new PacMan_Pane());
        jtp.addTab("Snake", new Snake_Pane());     

        pane.add(jtp);

        setVisible(true);
    }  
    public static void main(String[] args) {
        new MF_GameHub();
    }
}

然后添加:

public class MineSweeper_Pane extends JPanel {
    public MineSweeper_Pane() {    
        statusbar = new JLabel("");
        add(statusbar, BorderLayout.SOUTH);
        add(new MineSweeper_Board(statusbar));
    }
}

编辑我想我很累; 您正在JFrame扩展类中使用JFrame属性; 删除JFrame属性并使用属性(或不使用 ),而不要使用属性jfrm;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM