其中一个JLayeredPane图层未显示

时间:2015-05-31 15:15:58

标签: java swing jlayeredpane

有许多类似的帖子,特别是: Java Swing JLayeredPane not showing upTop layer in JLayeredPane not displaying

但他们似乎都没有解决我的具体问题。

我有以下代码:

public class PlayScreen{
private JLayeredPane playScreen;
private Player player;
private JPanel towerButtons;
private JPanel detailPanel;
private JLabel map;
public PlayScreen(Player player){
    this.player = player;
    playScreen = new JLayeredPane();
    playScreen.setLayout(new BorderLayout());
    setTowerButtons();
    playScreen.add(towerButtons, BorderLayout.EAST);
    playScreen.setLayer(towerButtons, 0);        
    setDetailLabels();
    playScreen.add(detailPanel, BorderLayout.WEST);
    playScreen.setLayer(detailPanel, 0);        
    setMap(player.getNextMap());
    playScreen.add(map, BorderLayout.CENTER);
    playScreen.setLayer(map, 0);
    JButton playButton = new JButton("play");
    playScreen.add(playButton, BorderLayout.NORTH);
    playScreen.setLayer(playButton, 0);        
    playButton.addActionListener(new playListener());
    playScreen.setVisible(true);
}

其中在构造函数中调用的setTowerButtons(),setDetailLabels()和setMap()方法基本上初始化了towerButtons,detailPanel和map字段。 按下“播放”按钮时,将调用以下代码:

public class playListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        Image image = null;
        try{
            image = ImageIO.read(new File("mob1.bmp"));
        }
        catch (Exception e1){
            System.out.println("image creation failed");
        }
        ImageIcon img = new ImageIcon(image);
        JLabel mob1Button = new JLabel(img);
        System.out.println("hi");            
        playScreen.add(mob1Button, BorderLayout.CENTER);
        playScreen.setLayer(mob1Button, 1);
        mob1Button.setVisible(true);
    }
}  

我知道这肯定被调用,因为“hi”出现在输出流上。

(playScreen是一个JLayeredPane,由此构建:)

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.setLocationRelativeTo(null); //puts frame in middle of screen
    frame.pack();
    frame.setVisible(true);
}

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 JPanel getLoadScreen(){
        return loadScreen;
    }

    public class OpenActionListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            makePlayScreen(player);//might not be receiving correct player variable?
        }
    }

    public class LoadActionListener implements ActionListener{
        public void actionPerformed(ActionEvent e){

        }
    }
}

}

public GameManager(){
    player = new Player();
    player.setNextMap("map.bmp");
    //Tower tower = new Tower1();
    //player.addUnlockedTower(tower);
    view = new View(player);
    view.makeLoadScreen();
}

创建了一个GameManager类。这会创建loadScreen,它有两个按钮,“播放”和“加载”。单击“播放”会创建播放屏幕,该播放屏幕由单独的类控制。

对不起所有的代码,但我不知道哪里出错了,我认为这与没有设置playScreen,towerButtons等的大小有关,就像在类似的帖子中一样,但是没有当我添加首选/最小/最大尺寸时似乎工作。

目前地图的图像出现了,但“mob1”的图像根本没有出现,我希望它能覆盖地图图像。

0 个答案:

没有答案