Java:哪种布局管理器最适合游戏菜单?
Java: What Layout Manager would be best for a game menu?
===================
游戏名称
播放
退出
===================
以上是我之前的游戏菜单的样子。我使用 Box Layout 来创建它,但它非常乏味。有没有我可以使用的更好的布局管理器?
这里是那些询问主窗格的代码。
private JButton JB;
private JButton EB;
private JOptionPane JO;
public StartUpWindow(){
super("Pong");
JPanel outside = new JPanel();
JPanel inside = new JPanel();
setLayout(new BorderLayout());
outside.setLayout(new BoxLayout(outside, BoxLayout.LINE_AXIS));
inside.setLayout(new BoxLayout(inside, BoxLayout.PAGE_AXIS));
outside.add(Box.createHorizontalStrut(280));
outside.add(inside);
outside.add(Box.createHorizontalStrut(20));
inside.add(Box.createVerticalStrut(20));
JLabel title = new JLabel(" "+"Pong");
title.setFont( new Font("Serif", Font.BOLD, 40));
inside.add(title);
inside.add(Box.createVerticalStrut(20));
JButton btt1 = new JButton("Start");
Dimension d = new Dimension(200,40);
btt1.setSize(d);
btt1.setMinimumSize(d);
btt1.setMaximumSize(d);
btt1.setPreferredSize(d);
JButton btt2 = new JButton("Credits");
btt2.setSize(d);
btt2.setMinimumSize(d);
btt2.setMaximumSize(d);
btt2.setPreferredSize(d);
JButton btt3 = new JButton("Exit");
btt3.setSize(d);
btt3.setMinimumSize(d);
btt3.setMaximumSize(d);
btt3.setPreferredSize(d);
inside.add(btt1);
btt1.addActionListener(this);
btt1.setActionCommand("start");
inside.add(Box.createVerticalStrut(5));
inside.add(btt2);
btt2.addActionListener(this);
btt2.setActionCommand("credits");
inside.add(Box.createVerticalStrut(5));
inside.add(btt3);
btt3.addActionListener(this);
btt3.setActionCommand("exit");
inside.add(Box.createVerticalStrut(20));
add(outside);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(800,600);
this.setVisible(true);
this.setResizable(false);
this.setLocation(450,200);
inside.setBackground(Color.GRAY);
outside.setBackground(Color.GRAY);
}
我同意 BoxLayout 很乏味,但我很欣赏它的相对简单性。
另一个快速简便的选择是使用 "javax.swing.Box" class 而不是直接使用布局管理器。
Box box = Box.createVerticalBox();
box.add(new JLabel("Game"));
box.add(Box.createVerticalStrut(20));
box.add(new JLabel("Button 1"));
box.add(new JLabel("Button 2"));
JFrame frame = new JFrame();
frame.add(box);
frame.pack();
frame.setVisible(true);
Box 提供了许多有用的方法。你可以用它来创建垂直和水平的框,创建"struts"来保留水平和垂直的space,创建"glue"来在布局增长时填充可用的space。
当然您也可以使用 GridBagLayout,但我倾向于将其保留用于更复杂的布局。 Box 和他的堂兄弟 BoxLayout 对于简单的布局通常足够好,并且对于维护应用程序的新程序员来说很容易理解和调试。
为什么不简单地不使用任何布局,而是使用 Graphics
对象绘制所有内容?
您可以通过创建绑定到 Window
对象的 BufferStrategy
(在后者上调用 createBufferStrategy
)然后调用一些简单的方法轻松重绘屏幕来轻松实现此目的。
这也意味着在玩游戏时编写游戏显示代码会更简单。
BufferStrategy
还允许在应用程序处于全屏独占模式时使用翻页和其他形式的缓冲,使其在许多应用程序中可以非常快速地刷新屏幕。
===================
游戏名称
播放
退出
===================
以上是我之前的游戏菜单的样子。我使用 Box Layout 来创建它,但它非常乏味。有没有我可以使用的更好的布局管理器?
这里是那些询问主窗格的代码。
private JButton JB;
private JButton EB;
private JOptionPane JO;
public StartUpWindow(){
super("Pong");
JPanel outside = new JPanel();
JPanel inside = new JPanel();
setLayout(new BorderLayout());
outside.setLayout(new BoxLayout(outside, BoxLayout.LINE_AXIS));
inside.setLayout(new BoxLayout(inside, BoxLayout.PAGE_AXIS));
outside.add(Box.createHorizontalStrut(280));
outside.add(inside);
outside.add(Box.createHorizontalStrut(20));
inside.add(Box.createVerticalStrut(20));
JLabel title = new JLabel(" "+"Pong");
title.setFont( new Font("Serif", Font.BOLD, 40));
inside.add(title);
inside.add(Box.createVerticalStrut(20));
JButton btt1 = new JButton("Start");
Dimension d = new Dimension(200,40);
btt1.setSize(d);
btt1.setMinimumSize(d);
btt1.setMaximumSize(d);
btt1.setPreferredSize(d);
JButton btt2 = new JButton("Credits");
btt2.setSize(d);
btt2.setMinimumSize(d);
btt2.setMaximumSize(d);
btt2.setPreferredSize(d);
JButton btt3 = new JButton("Exit");
btt3.setSize(d);
btt3.setMinimumSize(d);
btt3.setMaximumSize(d);
btt3.setPreferredSize(d);
inside.add(btt1);
btt1.addActionListener(this);
btt1.setActionCommand("start");
inside.add(Box.createVerticalStrut(5));
inside.add(btt2);
btt2.addActionListener(this);
btt2.setActionCommand("credits");
inside.add(Box.createVerticalStrut(5));
inside.add(btt3);
btt3.addActionListener(this);
btt3.setActionCommand("exit");
inside.add(Box.createVerticalStrut(20));
add(outside);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(800,600);
this.setVisible(true);
this.setResizable(false);
this.setLocation(450,200);
inside.setBackground(Color.GRAY);
outside.setBackground(Color.GRAY);
}
我同意 BoxLayout 很乏味,但我很欣赏它的相对简单性。
另一个快速简便的选择是使用 "javax.swing.Box" class 而不是直接使用布局管理器。
Box box = Box.createVerticalBox();
box.add(new JLabel("Game"));
box.add(Box.createVerticalStrut(20));
box.add(new JLabel("Button 1"));
box.add(new JLabel("Button 2"));
JFrame frame = new JFrame();
frame.add(box);
frame.pack();
frame.setVisible(true);
Box 提供了许多有用的方法。你可以用它来创建垂直和水平的框,创建"struts"来保留水平和垂直的space,创建"glue"来在布局增长时填充可用的space。
当然您也可以使用 GridBagLayout,但我倾向于将其保留用于更复杂的布局。 Box 和他的堂兄弟 BoxLayout 对于简单的布局通常足够好,并且对于维护应用程序的新程序员来说很容易理解和调试。
为什么不简单地不使用任何布局,而是使用 Graphics
对象绘制所有内容?
您可以通过创建绑定到 Window
对象的 BufferStrategy
(在后者上调用 createBufferStrategy
)然后调用一些简单的方法轻松重绘屏幕来轻松实现此目的。
这也意味着在玩游戏时编写游戏显示代码会更简单。
BufferStrategy
还允许在应用程序处于全屏独占模式时使用翻页和其他形式的缓冲,使其在许多应用程序中可以非常快速地刷新屏幕。