不知道如何将JPanel发送到主类

时间:2016-05-02 17:35:17

标签: java swing jpanel paintcomponent border-layout

所以我是新手,并且已经学习了很多,感谢这个网站,但是现在我已经展示了如何正确地创建和绘制图形...我无法显示JPanels I&# 39; ve在另一个班级创建。 我可以从另一个类中绘制,就像在drawString中一样,但是我希望JButton在我的BorderLayout.NORTH中的JPanel上;我只想画到我的mainGame是BorderLayout.CENTER。 我不太确定如何。

这是主要的课程。

  //Imports
  import javax.swing.*;
  import javax.swing.event.*;
  import java.awt.event.*;
  import java.awt.*;
  import java.awt.image.*;

  //This is the main game it self; where the foundations of all actions will occur.
  public class RPGClicker
  {
     public static void main(String[] args)
     {
        SwingUtilities.invokeLater(new Runnable()
        {
           public void run()
           {
  //Calls the mainGameScene method.
              mainGameScene();
           }
        });
     }

  //This builds the inital game it self.         
     private static void mainGameScene()
     {
        JFrame window;
        mainGamePanel mainGameInstance;
        statusPanel statusInstance;
        playerInfoPanel playerInfoInstance;
        navBarDisplayPanel navBarDisplayInstance;

        window = new JFrame("RPGClicker: An Unknown Quest!");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLayout(new BorderLayout());

        mainGameInstance = new mainGamePanel();
        statusInstance = new statusPanel();
        playerInfoInstance = new playerInfoPanel();
        navBarDisplayInstance = new navBarDisplayPanel();

  //Adding each of the panels to their allocated spots in the window.
        window.add(mainGameInstance, BorderLayout.CENTER);
        window.add(statusInstance, BorderLayout.SOUTH);
        window.add(playerInfoInstance, BorderLayout.EAST);
        window.add(navBarDisplayInstance, BorderLayout.NORTH);

        window.pack();
        window.setLocationRelativeTo(null);
        window.setVisible(true);
     }
  }

其余的会更小。 所以我现在可以画到我的mainGamePanel,这很棒! 但现在我只能画到我的其他小组;我希望它们包含文本字段和JButton。

  //Imports
  import javax.swing.*;
  import javax.swing.event.*;
  import java.awt.event.*;
  import java.awt.*;
  import java.awt.image.*;

  //This allows the creation of instances for the navBarDisplayInstance.
  class navBarDisplayPanel extends JPanel
  {   
     JButton yourStory;

     public Dimension getPreferredSize()
     {
        return new Dimension(1280, 256);
     }

  //This allows the drawing of graphics.  
     private void navBarDisplayPanel()
     {
        yourStory = new JButton("Your Story");

        add(yourStory);
     }
  }

代码编译但是当我运行时我看不到任何东西,北条是完全空的。任何人都可以提出任何想法吗?

1 个答案:

答案 0 :(得分:1)

我假设:

private void navBarDisplayPanel()

是您认为类navBarDisplayPanel的构造函数确实是什么的。

作为构造函数,如果要从外部类创建对象,则不应将其设为私有,应删除void标记,因为这不是常规方法,并且(可选但不是可选的) )你应该用第一个字母作为大写来命名你所有的类(和它们的构造函数)。

为了使你的代码有效,我想你只需要重命名:

private void navBarDisplayPanel(){
    yourStory = new JButton("Your Story");
    add(yourStory);
}

到此:

public navBarDisplayPanel(){
    yourStory = new JButton("Your Story");
    add(yourStory);
}

但正如我所指出的那样,尝试遵循Java Naming Conventions(以及其他惯例)以避免将来出现错误。