2015-05-24 5 views
0

Я просмотрел несколько похожих сообщений, но у меня нет такой же проблемы, как у меня, что кажется относительно простым. У меня есть следующий код:Панели JPANEL EAST и CENTER кажутся наложенными

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); 
     } 
    } 

} 

}

The View класс первый созданный. Я вручную вызываю метод makeLoadScreen() (хотя позже я его поменю, чтобы сделать это автоматически), который создает LoadScreen, описанный во вложенном классе. Это дает представление о двух кнопках, воспроизведении и загрузке. При нажатии на воспроизведение создается PlayScreen, где проблема.

Когда он запускается, detailPanel всегда отображается в левом верхнем углу, как и предполагалось. Но панель towerButtons исчезает, и отображается кнопка «hello», заполняя остальную часть экрана. Если я переключаю линии 6 и 10, кнопка «hello» исчезает, и на панели TowerButtons отображается, заполняя остальную часть экрана.

Вместо этого я хотел бы, чтобы башня Кнопки отображались справа, с помощью кнопки «привет» между этим и detailPanel.

Редактирование: добавлена ​​остальная часть кода, должно было сделать это раньше, извините! Edits2: Проблема оказывается с «TowerButtons», не имеет ничего общего с наложением JPanel.

+1

Для лучшей помощи, размещать скриншоты и [более полный пример] (http://stackoverflow.com/help/mcve), который воспроизводит поведение, которое вы видите. – Radiodef

+1

Просьба указать похожие сообщения. – trashgod

ответ

0

Я хотел бы, чтобы башня кнопки отображалась справа, с помощью кнопки «привет» между этим и detailPanel.

Проблема, вероятно, где-то в вашем коде, так что я не думаю, что это должно помочь, но здесь:

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(); 
    } 
} 
+0

Проблема действительно была где-то в коде, получается, что «towerButtons» JPanel не был настроен правильно, поэтому он создал пробел. Коммутационная линия 6 и 10 породила противоположную проблему по совершенно другой причине, поэтому совпадение показало, что JPanel, казалось, перекрывался. – w1nter