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

时间:2016-07-13 11:05:57

标签: java swing jtabbedpane

我的教授让我创建一个JSwing应用程序,它有三个标签窗格,每个窗格都有一个游戏。

我根据zetcode.com website为三种不同的游戏(Snake,MineSweaper和Packman)创建了三种不同的java应用程序。每个应用程序都包含一个包含JFrame和main方法的Main Class,以及另一个类(扩展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接口),它包含三个选项卡式窗格,每个窗格都可以保存或调用一个特定的游戏。不幸的是,我要么总是得到错误,要么得到空白标签。

新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
}

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

1 个答案:

答案 0 :(得分:2)

在这种情况下,我会将JFrameJFrame contentPane分开。 之后,您只需使用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属性并使用 this (或不使用),而不是使用属性jfrm;)