我正在使用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存在面板层次结构问题。
如果有人做了一个类似的项目并且可以给我一些编码指针,那就更好了。它将以这种方式工作,但它似乎凌乱和低效。
答案 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..
}
}
我不知道这是不是最好的方式,但它运作良好