如何将JPanel从其他类添加到现有Frame

时间:2016-06-04 14:28:52

标签: java swing class

我的MainWindow课程中有menue按钮和其他所有内容。在它的中间是一个名为内容的小组。我想将其他类的JPanel加载到此字段中。但是,当我开始下面的代码时,没有任何显示。

MainWindow类:

    public class MainWindow {

    private JFrame frame;

    private JScrollPane Content;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MainWindow window = new MainWindow();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public MainWindow() {
        initialize();
    }
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JScrollPane scrollPane = new JScrollPane();
        frame.getContentPane().add(scrollPane, BorderLayout.CENTER);

        JPanel TopPanel = new JPanel();
        scrollPane.setColumnHeaderView(TopPanel);

        JLabel lblNewLabel = new JLabel("Made by " + Globals.Author);
        TopPanel.add(lblNewLabel);

        JButton btnHome = new JButton("Home");
        TopPanel.add(btnHome);
        btnHome.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                Content.add(new Home());

            }
        });

        Content = new JScrollPane();
        scrollPane.setViewportView(Content);
    }

}

JPanel Class:

    public class Home extends JPanelContentTemplate {
            /**
             * Create the panel.
             */
            protected void InitializeComponents(){
                setLayout(new BorderLayout(0, 0));

                JPanel OptionsMenuePanel = new JPanel();
                add(OptionsMenuePanel, BorderLayout.WEST);

                JPanel ConentPanel = new JPanel();
                add(ConentPanel, BorderLayout.CENTER);
                ConentPanel.setLayout(new GridLayout(1, 2, 0, 0));

                JLabel lblConnectedWith = new JLabel("Connected With:");
                ConentPanel.add(lblConnectedWith);

                JTextPane textServerIP = new JTextPane();
                ConentPanel.add(textServerIP);
            }

            @Override
            protected void Refresh() {
                // TODO Auto-generated method stub

            }
}

InitializeComponents方法来自Self Created Superclass:

public abstract class JPanelContentTemplate extends JPanel {

    /**
     * Create the panel.
     */
    public JPanelContentTemplate() {
        InitializeComponents();
    }

    protected abstract void InitializeComponents();
    protected abstract void Refresh();
}

我也试过重画等。

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

没有任何内容显示,因为您只向GUI添加空JScrollPanes:

Content = new JScrollPane();
scrollPane.setViewportView(Content);

答案 1 :(得分:0)

以下是向MainFrame添加单独面板的简单示例。我希望它对你有所帮助。

public class SidePanel extends JPanel {

    private JLabel label;

    public SidePanel() {

       setBorder(BorderFactory.createEtchedBorder());

       label = new JLabel("Hello");

       setVisible(true);
       /* More Code Goes Here */
    }
}

public class CenterPanel extends JPanel {

      /* Center Panel Code */

}

public class MainFrame extends JFrame {

     private SidePanel sidePanel;
     private CenterPanel centerPanel;

     public MainFrame() {

         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setLayout(new BorderLayout());

         sidePanel = new SidePanel();
         centerPanel = new CenterPanel();

         add(sidePanel, BorderLayout.WEST);
         add(centerPanel, BorderLayout.CENTER);

         setSize(300, 300);
         setVisible(true);
    }
}

/* Main App */
public static void main(String [] args) {

    try {
                                       /* Lambda Expression */
        SwingUtitlities.InvokeLater(() -> new MainFrame());
    } catch(Exception ex) {
        ex.printStackTrace();
    }
}