2015-06-20 63 views
0

===================
游戏名称Java:什么布局管理器最适合游戏菜单?

播放
退出

============= ======

以上是我以前的游戏菜单的样子。我使用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); 


} 
+0

为什么“盒子”单调乏味?你能显示你的代码吗? – markspace

+0

我更喜欢'GridBagLayout'来获得一个简单的居中菜单,标题和下面的按钮。 – CoderMusgrove

+0

为什么你想要所有的按钮正好是200x40像素? – immibis

回答

3

我同意的BoxLayout是乏味的,但我欣赏其相对简单。

另一种快捷方便的选择是使用“javax.swing.Box”类,而不是直接使用布局管理器。

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提供了许多有用的方法。您可以使用它来创建垂直和水平方框,创建“支柱”以保留水平和垂直空间,并在布局增长时创建“胶水”以填充可用空间。

当然你也可以使用GridBagLayout,但我倾向于保留它以适应更复杂的布局。 Box和他的堂兄BoxLayout通常对于简单的布局来说足够好,并且对于维持应用程序理解和调试的新程序员来说很容易。

0

为什么不简单地使用没有布局,而是使用Graphics对象绘制所有对象?


你可以很容易地通过创建绑定到Window对象(调用对后者createBufferStrategy)一BufferStrategy然后调用几个简单的方法可以轻松地刷新屏幕实现这一目标。

这也意味着在玩游戏时再编码游戏的显示会更简单。


BufferStrategy还允许使用翻页和其他形式的缓冲的当应用程序处于全屏独占模式,使其能够非常迅速地刷新屏幕,在许多应用中。