按钮布局问题 - JFrame

时间:2013-09-07 22:54:24

标签: java swing jframe jpanel

我想创建一个在中心有大面积文本的应用程序,底部有一排5个按钮。这是我的代码:

public TheDungeon()
{
  setTitle("InsertGameNameHere");
  setSize(750, 600);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setLayout(new BorderLayout());
  setLocationRelativeTo(null);


  gameScreen = new JLabel();

  add(gameScreen, BorderLayout.CENTER);
  add(buttonPanel, BorderLayout.SOUTH);

  setVisible(true);    

} 

private void buildButtonPanel()
{
  // Create a panel for the buttons.
  buttonPanel = new JPanel();

  // Create the buttons.
  b1 = new JButton("Button 1");
  b2 = new JButton("Button 2");
  b3 = new JButton("Button 3");
  b4 = new JButton("Button 4");
  b5 = new JButton("Button 5");

  // Add the buttons to the button panel.
  buttonPanel.add(b1);
  buttonPanel.add(b2);
  buttonPanel.add(b3);
  buttonPanel.add(b4);
  buttonPanel.add(b5);
}

我的应用程序甚至不会运行。当我试图运行它时它会崩溃。我不确定是什么问题。 我的错误,如果有任何帮助:

Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:1086)
at java.awt.Container.add(Container.java:998)
at javax.swing.JFrame.addImpl(JFrame.java:562)
at java.awt.Container.add(Container.java:966)
at TheDungeon.<init>(TheDungeon.java:38)
at TheDungeon.main(TheDungeon.java:230)

1 个答案:

答案 0 :(得分:2)

此例外:

Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:1086)
at java.awt.Container.add(Container.java:998)
at javax.swing.JFrame.addImpl(JFrame.java:562)
at java.awt.Container.add(Container.java:966)
at TheDungeon.<init>(TheDungeon.java:38)
at TheDungeon.main(TheDungeon.java:230)

意味着您正在尝试在TheDungeon类的第38行“取消引用”空变量:at TheDungeon.<init>(TheDungeon.java:38)

我猜这涉及buttonPanel。你有没有调用buildButtonPane() - 我在任何地方都看不到这个电话?如果不这样,buttonPanel JPanel将为null。

解决方案:在使用JPanel之前调用该方法。更好的是,让方法返回,然后再使用一个JPanel。

从这个问题中吸取教训不是具体的解决方案,而是如何阅读NullPointerException。它会告诉你导致错误的是哪一行,然后你可以检查该行上的变量以查看哪个为null,然后追溯到你的代码并查看原因。