【问题标题】:How to add an JPanel from an other class to an existing Frame如何将 JPanel 从其他类添加到现有框架
【发布时间】:2016-06-04 14:28:51
【问题描述】:

我有我的 MainWindow 类,其中包含菜单按钮和其他所有内容。在它的中间是一个叫做内容的面板。我想将其他类中的 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();
}

我也尝试过重绘等。

感谢您的帮助

【问题讨论】:

  • 你真的应该按照惯例命名你的变量...第一个字母总是小写!
  • 我知道,但在 c# 中它不是这样,代码是给我自己的,所以我只使用一个标准......
  • 但是当您在此处发布代码并提出相关问题时,您不是“为自己编码”。出于对这里和其他地方免费帮助您的志愿者的尊重,您发布的代码应该符合标准。

标签: java swing class


【解决方案1】:

什么都没有显示,因为您只向 GUI 中添加了空的 JScrollPanes:

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

【讨论】:

  • 谢谢!!那是我错过的。
【解决方案2】:

这是一个向 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();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    相关资源
    最近更新 更多