我目前正在尝试在JFrame
窗口中为正在开发的测试游戏创建原始HUD。在这样做的过程中,我所有的尝试都受到挫败。要么包含所有用于表示HUD的按钮的面板都不显示,要么,我尝试绘制的Canvas
似乎不存在,因为我没有绘制任何图形。
我相信的问题是,这些层没有“重叠”,因此一个层遮挡了另一层。但是,我尝试使用Flowlayout()
(仅用于测试目的),但仍然无法解决我的问题。因此,现在,我对尝试使用HUD按钮/标签感到茫然。
出于视觉目的,我正在尝试执行以下操作:
但是我实际上正在得到这个(只是一个测试图块,没有HUD): 这是其中涉及的代码:
public static void createDrawFrame(int width, int height) {
f = new JFrame();
c = new Canvas();
c.setPreferredSize(new Dimension(width, height));
c.setFocusable(false);
f.add(c);
f.pack();
f.setSize(width, height);
f.setLocationRelativeTo(null);
和
public static JFrame getDrawFrame() {
f.setVisible(true);
return f;
}
和
public static JFrame createHUD(JFrame f, Game game) {
Panel p = new Panel();
p.setLayout(new FlowLayout());
p.setSize(100, 100);
p.setLocation(300, 0);
Button b0 = new Button("Settings");
Button b1 = new Button("Exit");
MenuListeners mListeners = new MenuListeners(game);
b0.addActionListener(mListeners);
b1.addActionListener(mListeners);
p.add(b0);
p.add(b1);
f.add(p);
return f;
}
在这里被称为
private void init() {
Display.createDrawFrame(width, height);
Display.createMenuFrame(width, height);
this.f = Display.getDrawFrame();
this.c = Display.getCanvas();
this.f = HUDDisplay.createHUD(this.f, this);
MapAssets.init();
}
并在此处呈现:
private void render() {
b = c.getBufferStrategy();
if(b == null) {
c.createBufferStrategy(3);
return;
}
do {
do {
g = b.getDrawGraphics();
g.clearRect(0, 0, width, height);
state.render(g);
b.show();
}while(b.contentsLost());
g.dispose();
}while(b.contentsRestored());
}
希望我已正确说明了此问题。回顾一下,我只想知道为什么我的按钮没有按原样显示在JFrame中。感谢您的帮助。
答案 0 :(得分:2)
我认为您可以将JFrame
的{{1}}的添加方法与画布和按钮一起使用。我更改了代码以显示(演示)它可以完成。我希望这是您想要的。
我使用如下代码将组件(带有按钮的BorderLayout
和Canvas
添加到Panel
,以使其可见:
JFrame
这里有指向Oracle Swing上的Java教程的链接,以获取更多详细信息;请参阅Swing Components和Laying Out Components Within a Container上的部分。
示例代码:
frame.add(panel, BorderLayout.NORTH); // panel with buttons
frame.add(canvas, BorderLayout.CENTER);