【问题标题】:Building a game GUI in java用java构建游戏GUI
【发布时间】:2014-10-20 04:05:29
【问题描述】:

我正在用 Java 为我正在开发的虚拟宠物游戏构建 GUI,到目前为止,我的主要问题是确定获得所需结果的最佳方法。

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

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

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

GamePanel 是我遇到问题的地方。

我想提供一个屏幕来允许玩家输入数据(宠物名称、类型等) '不知道这是否是最好的方法,因为我还希望他们能够检查详细信息是否正确,如果不允许他们重新输入。

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

宠物区域(背景、宠物动画) 在此按钮下方保持静态。

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

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

如果有人做过类似的项目并且可以给我一些更好的编码建议,将不胜感激。它将以这种方式工作,但它看起来很混乱且效率低下。

【问题讨论】:

  • CardLayout 是一个好的开始。您可以考虑创建一个半透明面板,当您希望用户输入数据时,您可以将其覆盖在 GamePane 上,如果可能的话,暂停其下的游戏。这将要求GamePane 本身有它自己的布局,例如OverlayLayout 甚至GridBagLayout

标签: java swing user-interface


【解决方案1】:

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

我会这样做:

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

我不知道这是否是最好的方法,但效果很好

【讨论】:

  • 谢谢,我假设我在自己的类中创建 ButtonsPanel 和 GraphicsPanel?
【解决方案2】:

我想提供一个屏幕让玩家输入数据(宠物名称、类型等)

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

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

看起来像BorderLayout,其中一个面板位于“CENTER”,另一个位于“PAGE_END”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多