Java 无法查看在帧中心添加的第一个JPanel

Java 无法查看在帧中心添加的第一个JPanel,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,查看我的代码当我试图在安装程序屏幕的中心添加一个阶段时,打开JFrame时,我什么都没有得到。我通过将add()方法放置在overridensetVisible()方法中实现了相同的代码,我故意不放置工作代码,因为我想知道这段代码有什么问题 public class InstallerFrameDemo extends JFrame { private static final long serialVersionUID = 2L; private JPanel master

查看我的代码当我试图在安装程序屏幕的中心添加一个阶段时,打开
JFrame
时,我什么都没有得到。我通过将
add()
方法放置在overriden
setVisible()
方法中实现了相同的代码,我故意不放置工作代码,因为我想知道这段代码有什么问题

public class InstallerFrameDemo extends JFrame {

    private static final long serialVersionUID = 2L;

    private JPanel masterPanel;
    private JPanel titlePanel;
    private JLabel title;
    private JPanel centerView;
    private JPanel currentProgress;
    private JPanel buttonPanel;

    private JButton next;
    private JButton back;
    private JButton exit;
    private JButton finished;
    private InstallerModel model;   
    private NavigationButtonsListener navButtonsListener;

    public InstallerFrameDemo(InstallerModel model) {
        if (model == null) {
            throw new NullPointerException();
        }

        this.model = model;

        masterPanel = new JPanel();
        titlePanel = new JPanel();
        title = new JLabel("Welcome to application installer");
        centerView = new JPanel();
        currentProgress = new JPanel();
        buttonPanel = new JPanel();

        next = new JButton("Next");
        back = new JButton("Back");
        exit = new JButton("Exit");
        finished = new JButton("Finished");

        navButtonsListener = new NavigationButtonsListener();

        add(model.getCurrentStage());

        back.setEnabled(false);
        finished.setEnabled(false);

        if (model.getStageCount() <= 1) {
            next.setEnabled(false);
            exit.setEnabled(false);
            finished.setEnabled(true);
        }

        exit.addActionListener(navButtonsListener);
        next.addActionListener(navButtonsListener);
        back.addActionListener(navButtonsListener);
        finished.addActionListener(navButtonsListener);

        masterPanel.setBackground(Color.WHITE);
        titlePanel.setBackground(new Color(230, 230, 230));
        centerView.setBackground(Color.WHITE);
        buttonPanel.setBackground(Color.WHITE);
        currentProgress.setBackground(Color.decode("#26b8ee"));

        title.setBorder(new EmptyBorder(15, 15, 15, 15));

        title.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 18));
        currentProgress.setPreferredSize(new Dimension(4, 4));

        masterPanel.setLayout(new BorderLayout());
        centerView.setLayout(new BorderLayout());
        buttonPanel.setLayout(new GridLayout());

        titlePanel.add(title);

        centerView.add(currentProgress, BorderLayout.PAGE_END);

        buttonPanel.add(exit);
        buttonPanel.add(back);
        buttonPanel.add(next);
        buttonPanel.add(finished);

        masterPanel.add(titlePanel, BorderLayout.PAGE_START);
        masterPanel.add(centerView, BorderLayout.CENTER);
        masterPanel.add(buttonPanel, BorderLayout.PAGE_END);

        setContentPane(masterPanel);

        setTitle("Welcome to application installer");
        setSize(800, 600);
    }

    protected void addImpl(Component comp, Object constraints, int index) {
        if (comp == null) {
            throw new NullPointerException();
        }
        if (centerView != null) {
            centerView.removeAll();

            // able to see
            centerView.add(currentProgress, BorderLayout.PAGE_END); // successfully added

            if (comp instanceof InstallerStage) {
                InstallerStage stage = (InstallerStage) comp;
                title.setText(stage.getTitle());
                this.centerView.add(comp, BorderLayout.CENTER, index);
                System.out.println(comp); // For first stage toString return - in first stage
                // Got the output - in first stage but no change in view

                repaint(); // Test 1
                revalidate(); // Test 2
            }
        } else {
            super.addImpl(comp, constraints, index);
        }
    }


    public InstallerModel getInstallerModel() {
        return model;
    }

    private class NavigationButtonsListener implements ActionListener {
        public void actionPerformed(ActionEvent ae) {
            if (ae.getSource() == exit) {
                System.exit(0);
            }
            if (ae.getSource() == back) {
                finished.setEnabled(false);
                exit.setEnabled(true);
                InstallerStage prevStage = model.getPreviousStage();
                if (prevStage != null) {
                    add(prevStage);
                    next.setEnabled(true);
                    if (model.getCurrentStageIndex() == 0) {
                        back.setEnabled(false);
                    }
                }
            }
            if (ae.getSource() == next) {
                InstallerStage currentStage = model.getCurrentStage();
                if (currentStage.process()) {
                    InstallerStage nextStage = model.getNextStage();
                    if (nextStage != null) {
                        add(nextStage);
                        back.setEnabled(true);
                        if (model.getCurrentStageIndex() == model
                                .getStageCount() - 1) {
                            next.setEnabled(false);
                            finished.setEnabled(true);
                            exit.setEnabled(false);
                        }
                    }
                }
            }
            if (ae.getSource() == finished) {
                InstallerStage currentStage = model.getCurrentStage();
                if (currentStage.process()) {
                    System.exit(0);
                }
            }
        }
    }
}
公共类InstallerFrameDemo扩展了JFrame{
私有静态最终长serialVersionUID=2L;
私人JPanel主面板;
私人JPanel titlePanel;
私人产权;
私有JPanel中心视图;
私人JPanel currentProgress;
私人JPanel按钮面板;
下一个私人按钮;
私用钮扣背面;
私人按钮出口;
完成私人按钮;
私有安装模型;
私有导航按钮侦听器navButtonsListener;
公共InstallerFrameDemo(InstallerModel模型){
if(model==null){
抛出新的NullPointerException();
}
this.model=模型;
主面板=新的JPanel();
titlePanel=新的JPanel();
title=新JLabel(“欢迎使用应用程序安装程序”);
centerView=新的JPanel();
currentProgress=newjpanel();
buttonPanel=新的JPanel();
下一步=新的按钮(“下一步”);
后退=新的按钮(“后退”);
退出=新的JButton(“退出”);
完成=新的按钮(“完成”);
navButtonsListener=新导航按钮Listener();
添加(model.getCurrentStage());
back.setEnabled(false);
已完成。设置已启用(false);

如果(model.getStageCount()是被重写的方法
protected void addImpl(组件comp,对象约束,int index)
给您带来了问题。如果您想向JFrame centerView添加一些内容,只需添加到它,就像添加JButtons exit一样,返回下一步并完成到buttonPanel;不要重写addImpl()正如您在JavaDocs()中看到的,重写该方法后,子对象被添加到contentPane而不是框架中。
尝试删除被重写的方法,您将看到除必须在其他地方实现的中心面板之外的所有可见方法。

除非代码可运行,否则我无法帮助您。