Java 按钮布局问题-JFrame

Java 按钮布局问题-JFrame,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我想创建一个应用程序,中间有一个大的文本区域,底部有一行5个按钮。这是我的密码: public TheDungeon() { setTitle("InsertGameNameHere"); setSize(750, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); setLocationRelativeTo(null); gameScreen = n

我想创建一个应用程序,中间有一个大的文本区域,底部有一行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)
线程“main”java.lang.NullPointerException中的异常 位于java.awt.Container.addImpl(Container.java:1086) 在java.awt.Container.add处(Container.java:998) 位于javax.swing.JFrame.addImpl(JFrame.java:562) 在java.awt.Container.add处(Container.java:966) 在TheDungeon.(TheDungeon.java:38) 在TheDungeon.main(TheDungeon.java:230) 此例外情况:

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)
线程“main”java.lang.NullPointerException中的异常 位于java.awt.Container.addImpl(Container.java:1086) 在java.awt.Container.add处(Container.java:998) 位于javax.swing.JFrame.addImpl(JFrame.java:562) 在java.awt.Container.add处(Container.java:966) 在TheDungeon.(TheDungeon.java:38) 在TheDungeon.main(TheDungeon.java:230) 表示您正试图在TheDungeon类的第38行“反引用”空变量:
在TheDungeon.(TheDungeon.java:38)

我猜这涉及到按钮面板。您是否调用过buildButtonPane()--我在任何地方都没有看到此调用?如果不这样做,按钮面板JPanel将为空

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


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

天哪,我觉得自己像个傻瓜。成功了。现在,我将它设置为请求输入,当我添加输入时,所有按钮都聚集在右上角。有没有办法强迫按钮保持在原来的位置?@Xearta:从这个问题中学到的不是具体的解决方案,而是如何读取NullPointerException。它会告诉你是哪一行导致了错误,然后你可以检查那一行上的变量,看看哪个是空的,然后追溯到你的代码,看看为什么。谢谢你提供的信息。实际上我不知道如何阅读这些错误,但是谢谢你让我知道如何阅读。我在上面的评论中问了一个问题。有办法解决这个问题吗?还有,我如何让方法像你上面说的那样返回JPanel?@Xearta:我认为你的新问题没有足够的信息来回答。我们不知道您在代码方面做了什么导致程序行为发生这种变化。也许你应该问一个新问题,告诉我们你是怎么做的。