将另一个类的JPanel调用到主类#39;的JPanel

时间:2015-12-17 21:14:21

标签: java jpanel japplet

下午好,

作为一个旨在帮助我练习使用JPanel和子类的个人项目,我正在编写一个专业的Web组合,其中包含我的教育,工作和志愿者经验,以及其他使用JApplet的着名作品。

我将布局设置为BorderLayout,JButtons对齐WEST。单击一个按钮时,CENTER中的JPanels应该使用适当的面板切换出来。但是,我还没那么远。

到目前为止,我只有一个JLabel到我的家庭JPanel上说'#34; Home,"因为我想在做更多事情之前确保Home JPanel类中的方法正常工作。问题是JPanel没有显示在applet上。

问题是,当我将所有代码从JPanel的类移到主类上时,它显示得很好。所以我知道问题在于我是如何构建方法的,或者是我如何构建我的JPanel类。

我已经尝试将其设置为可见 - 这不起作用。我已经尝试将LayoutManager设置为类构造函数的参数,我尝试添加paintComponent和super.paint(g),我尝试使用this.home.addHomePanel--但没有任何效果。

我知道我错过了一些事情。如果有人能帮助我,我们将不胜感激。如果您需要更多信息,请与我们联系。谢谢你的阅读。

主类:

     public class myWebFolio extends JApplet implements ActionListener
{
     JButton[ ] menu =
    {
        new JButton("Home"),
        new JButton("Education"),
        new JButton("Work Experience"),
        new JButton("Programming Projects"),
        new JButton("Other")
    };

    //adds panel to memory
    private JPanel buttonPanel = new JPanel();

    private Home home;


    public void init()
    {
        setLayout (new BorderLayout( ) ); //changes the layout of the appl

        home = new Home();

        buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));

        /*
         * Adds an ActionListener to each button
         * and then adds the button to the buttonPanel.
         * Also adds an invisible componenet to give the buttons
         * spacing.
         */
        for (int i=0; i<menu.length; i++)
          {
             menu[i].addActionListener(this);
             buttonPanel.add(Box.createVerticalStrut(100));
             buttonPanel.add(menu[i]);
          }

        add(buttonPanel,BorderLayout.WEST);   


        home.addHomePanel();


    }

    public void actionPerformed(ActionEvent event)
    {

    }

    public void paintComponent(Graphics g)
    {
        super.paint(g);
    }
}

Home Panel&#39;类:

public class Home extends JPanel
{
    JPanel homePanel = new JPanel(new FlowLayout()); 
    JLabel label = new JLabel("Home");

    /**
     * Constructor for objects of class Home
     */
    public Home()
    {

    }

    public void addHomePanel()
    {
        homePanel.add(label, FlowLayout.LEFT);
        homePanel.setVisible(true);
        add(homePanel, BorderLayout.CENTER);

    }

    public void paintComponent(Graphics g)
    {
        super.paint(g);
    }

}

0 个答案:

没有答案