我尝试做一些简单的游戏,由少数几个屏幕组成。 (菜单,选项等),可以通过显示和隐藏几个JPanel来工作。当我在每个面板上添加一些东西并运行程序时,唯一出现的是空JFrame。我的ID看起来像这样:
public class Frame extends JFrame{
JPanel panel1 = new JPanel();
JFrame frame = new JFrame("halo");
JButton button = new Button();
int WIDTH=600,HEIGHT=600;
public Frame(){
frame.add(game);
frame.setSize(WIDTH, HEIGHT);
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel1);
panel1.setBounds(0,0,WIDTH,HEIGHT)
panel1.add(button);
button.setBounds(10,10,30,30);
}}
所有重要的东西都是进口和宣传的,它只是简单的'版。它有什么问题?
答案 0 :(得分:4)
一些事情:
frame.setVisible(true);
来设置框架可见之前,请致电frame.pack();
答案 1 :(得分:1)
添加元素后设置布局管理器和打包应解决问题。此外,当您构建frame
时,您还不清楚为什么要引用this
。试试这个版本:
public class Frame extends JFrame{
JPanel panel1 = new JPanel();
JButton button = new Button();
int WIDTH=600,HEIGHT=600;
public Frame(){
setTitle("Halo");
setLayout(new BorderLayout());
add(panel1, BorderLayout.CENTER);
panel1.setBounds(0,0,WIDTH,HEIGHT);
panel1.setLayout(new BorderLayout());
panel1.add(button, BorderLayout.SOUTH);
button.setBounds(10,10,30,30);
pack();
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
答案 2 :(得分:1)
JFrame
使用BorderLayout
,这意味着只有一个组件可以占据BorderLayout
个管理员的五个可用位置。
默认情况下,如果您没有指定组件的位置,则会将其添加到CENTRE
位置
您应该将UI分解为逻辑单元,并使用JPanel
来管理它们
您可以使用面板和布局的组合来生成复杂的UI
您还应该考虑使用CardLayout
来允许您在基本视图之间切换
在您建立基本用户界面后,您还应该在JFrame
上调用setVisible,否则您需要拨打revalidate
和repaint
来更新UI
您应该避免在组件上使用setBounds
/ setSize
/ setLocation
并依赖布局管理器的使用,因为它们旨在管理在多个组件中发生的渲染管道的差异不同的操作系统和硬件平台