面板内的摆动面板未显示

时间:2016-05-10 05:18:13

标签: java swing layout-manager grouplayout

我试图创建一个JFrame,其中一个主面板包含两个面板:左侧子面板具有添加和删除按钮,这些按钮将动态添加和删除组件;右侧面板包含常规组件。当只有一个面板时,我的代码可以找到,在子面板中使用时会失败。

public class MultiPanel extends JFrame{

    static MultiPanel myFrame;
    static int countMe = 0;
    JPanel mainPanel;
    JPanel userPanel;
    JPanel contentPanel;

    private static void iniComponents() {
        myFrame = new MultiPanel();
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.prepareUI();
        myFrame.pack();
        myFrame.setVisible(true);
    }

    private void prepareUI() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("My Title");
        setPreferredSize(new java.awt.Dimension(1280, 720));
        setSize(new java.awt.Dimension(1280, 720));

        mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS));

        userPanel = new JPanel();
//      userPanel.setLayout(new BoxLayout(userPanel, BoxLayout.Y_AXIS));

        mainPanel.add(userPanel);

        JButton buttonAdd = new JButton("Add subPanel");
        buttonAdd.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                userPanel.add(new subPanel());
                myFrame.pack();
            }
        });

        JButton buttonRemoveAll = new JButton("Remove All");
        buttonRemoveAll.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                userPanel.removeAll();
                myFrame.pack();
            }
        });

        contentPanel = new JPanel();
        JLabel jLabel1 = new JLabel("Content here");
        contentPanel.add(jLabel1);
        mainPanel.add(contentPanel);

        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addComponent(mainPanel)
        );

        layout.setVerticalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addComponent(mainPanel)
        );

//      getContentPane().add(userPanel, BorderLayout.WEST);
//      getContentPane().add(contentPanel, BorderLayout.EAST);       
//      getContentPane().add(buttonAdd, BorderLayout.PAGE_START);
//      getContentPane().add(buttonRemoveAll, BorderLayout.PAGE_END);
    }

    private class subPanel extends JPanel {

        subPanel me;

        public subPanel() {
            super();
            me = this;
            JLabel myLabel = new JLabel("This is  subPanel(): " + countMe++);
            add(myLabel);
            JButton myButtonRemoveMe = new JButton("remove me");
            myButtonRemoveMe.addActionListener(new ActionListener(){

                @Override
                public void actionPerformed(ActionEvent e) {
                    me.getParent().remove(me);
                    myFrame.pack();
                }
            });
            add(myButtonRemoveMe);
        }              
    }

    public static void main(String args[]) {

        SwingUtilities.invokeLater(() -> {
            iniComponents();
        });
    }
}

我也想知道写布局的正确方法是什么,对齐和组织组件对我来说似乎很痛苦。

0 个答案:

没有答案