有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将来自其他类的JPanel添加到现有框架中

我有我的主窗口类,其中有菜单按钮和其他一切。中间是一个叫做内容的面板。我想将其他类中的JPanel加载到此字段中。但是当我启动下面的代码时,什么都没有显示

主窗口类:

    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类:

    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方法来自一个自行创建的超类:

public abstract class JPanelContentTemplate extends JPanel {

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

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

我还试过重新油漆等

谢谢你的帮助


共 (2) 个答案

  1. # 1 楼答案

    下面是一个向大型机添加单独面板的简单示例。我希望它能帮助你

    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();
        }
    }
    
  2. # 2 楼答案

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

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