Java JPanel东面板和中面板似乎重叠

Java JPanel东面板和中面板似乎重叠,java,swing,layout-manager,border-layout,Java,Swing,Layout Manager,Border Layout,我看过多个类似的帖子,但没有一个像我一样有问题,这看起来相对简单。我有以下代码: public PlayScreen(Player player){ this.player = player; playScreen = new JPanel(); playScreen.setLayout(new BorderLayout()); setTowerButtons(); playScreen.add(towerButtons, BorderLayout.EAS

我看过多个类似的帖子,但没有一个像我一样有问题,这看起来相对简单。我有以下代码:

public PlayScreen(Player player){
    this.player = player;
    playScreen = new JPanel();
    playScreen.setLayout(new BorderLayout());
    setTowerButtons();
    playScreen.add(towerButtons, BorderLayout.EAST);     //line 6
    setDetailLabels();
    playScreen.add(detailPanel, BorderLayout.WEST);
    setMap("map.png");
    playScreen.add(new JButton("hello"), BorderLayout.CENTER);     //line 10
    playScreen.setVisible(true);
}

public class View {
private JFrame frame;
private Container contentPane;
private Player player;
private LoadScreen loadScreen;
private PlayScreen playScreen;
public View(Player player){
    frame = new JFrame("Display");
    contentPane = frame.getContentPane();
    contentPane.setLayout(new BorderLayout());
    this.player = player;
    frame.setVisible(true);
    frame.pack();
}

public void makeLoadScreen(){
    loadScreen = new LoadScreen();
    contentPane.add(loadScreen.getLoadScreen(), BorderLayout.CENTER);
    frame.pack();
}

public void makePlayScreen(Player player){
    contentPane.remove(loadScreen.getLoadScreen());;
    playScreen = new PlayScreen(player);
    contentPane.add(playScreen.getPlayScreen());
    frame.pack();
}

public class LoadScreen{
    private JPanel loadScreen;
    public LoadScreen(){
        loadScreen = new JPanel();
        JButton play = new JButton("Play");
        JButton load = new JButton("Load");
        loadScreen.setLayout(new GridLayout(2,1,0,0));
        loadScreen.add(play);
        loadScreen.add(load);
        play.addActionListener(new OpenActionListener());
        load.addActionListener(new LoadActionListener());
    }

    public class OpenActionListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            makePlayScreen(player);
        }
    }

}
}

首先创建视图类。我手动调用makeLoadScreen()方法(尽管稍后我会将其更改为自动执行此操作),该方法创建嵌套类中描述的LoadScreen。这提供了两个按钮的视图:播放和加载。单击“播放”,然后创建问题所在的播放屏幕

运行时,detailPanel始终按预期显示在左上角。但towerButtons面板消失,显示“hello”按钮,填满了屏幕的其余部分。如果我切换第6行和第10行,“hello”按钮消失,towerButtons面板显示出来,填满了屏幕的其余部分

相反,我希望towerButtons显示在右边,在这个面板和detailPanel之间有一个“hello”按钮

编辑:添加了代码的其余部分,应该早点完成,抱歉! Edits2:问题在于“towerButtons”,与JPanel的叠加无关

我想在右边显示towerButtons,在这和detailPanel之间有“hello”按钮

问题可能出在代码的其他地方,因此我认为这对您没有帮助,但是:

public class Example extends JFrame {

    Example() {

        JPanel playScreen = new JPanel();
        playScreen.setLayout(new BorderLayout());

        JPanel towerButtons = new JPanel();
        towerButtons.add(new JLabel("towerButtons"));
        playScreen.add(towerButtons, BorderLayout.EAST);

        JPanel detailPanel = new JPanel();
        detailPanel.add(new JLabel("detailPanel"));
        playScreen.add(detailPanel, BorderLayout.WEST);

        playScreen.add(new JButton("hello"), BorderLayout.CENTER);

        add(playScreen);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String args[]) {

        new Example();
    }
}

为了获得更好的帮助,请发布屏幕截图和一个复制您看到的行为的链接。请引用类似的链接。问题确实出在代码的其他地方,结果是“towerButtons”JPanel没有正确配置,因此生成了一个空白。切换6号线和10号线出于完全不同的原因产生了相反的问题,因此JPanel似乎重叠了,这是巧合。