在java中构建游戏GUI

时间:2014-10-20 04:05:30

标签: java swing user-interface

我正在使用java构建一个用于虚拟宠物游戏的GUI,我正在研究,到目前为止我的主要问题是建立获得我想要的结果的最佳方法。

基本上我有这样的基本设置

JFrame(MainFrame) Jpanel(MainPanel)此面板位于Jframe上 然后我在主面板上添加了更多面板 menuPanel和gamePanel - 我使用cardLayout在面板之间切换

MenuPanel提供了一个基本菜单来启动游戏/加载/帮助/退出(运行正常)。

GamePanel是我遇到问题的地方。

我想提供一个允许玩家输入数据的屏幕(petName,Type等)我正在考虑将其作为一个面板进行操作,然后切换到将在其中播放实际游戏的gamePanel,但是我不知道这是否是最佳方式,因为我也希望他们能够检查细节是否正确,如果不允许他们重新输入它们。

我遇到的另一个问题是我想要这样的设置

宠物区(背景,宠物动画) 在这个按钮下方保持静止。

vvvvvvvvvvvvvvvvvvvvv
v                   v
v                   v
v    Pet Area       v
vvvvvvvvvvvvvvvvvvvvv
v                   v
v    buttons        v
vvvvvvvvvvvvvvvvvvvvv

我曾尝试在gamePanel上添加两个面板 - graphicPanel和buttonPanel,但netbeans存在面板层次结构问题。

如果有人做了一个类似的项目并且可以给我一些编码指针,那就更好了。它将以这种方式工作,但它似乎凌乱和低效。

2 个答案:

答案 0 :(得分:2)

  

我想提供一个允许玩家输入数据的屏幕(petName,Type等)

这可能是一个模型JDialog,而不是主框架上的面板。然后,您可以重新显示对话框并根据需要更改数据。

  

我遇到的另一个问题是我想要这样的设置......

好像是BorderLayout,其中一个面板位于“CENTER”中,另一个面板位于“PAGE_END”中。

答案 1 :(得分:2)

  

我遇到的另一个问题是我想要这样的设置

我会做这样的事情:

public class gamePanel extends JPanel{
    private ButtonsPanel buttonsPanel;
    private GraphicsPanel graphicsPanel;

    public gamePanel(){
        super();
        this._initGUI();
    }
    private void _initGUI(){
        this.buttonsPanel = new ButtonsPanel();
        this.graphicsPanel = new GraphicsPanel();

        this.setLayout(new BorderLayout());
        this.add(buttonsPanel, BorderLayout.SOUTH);
        this.add(graphicsPanel, BorderLayout.CENTER);
    }

    public void run(){
        graphicsPanel.run();
    }
}

public class GraphicsPanel extends JPanel(){

    public void run(){
        // this method could be called from the game loop.

        // ....
        // ....

        this.repaint();
    }

    @Override
    public void paint(Graphics g){
        // here paint all graphics
    }
}

public class ButtonsPanel extends JPanel{
    public ButtonsPanel(){
        super();
        this._initGUI();
    }

    private void _initGUI(){
        // here add all the buttons you want..
    }
}

我不知道这是不是最好的方式,但它运作良好