Java / Swing图层标签在彼此顶部

时间:2017-07-21 15:38:13

标签: java swing jframe jpanel z-axis

我知道这已被问过几次,但没有一个解决方案对我们有用。 我们正在重建一个有世界地图的游戏,并且应该在每个国家都展示旗帜。我们通过使用图形方法使其工作(有点),但这不是持久性的,我们也不能通过var名称来标记。

这就是为什么我们希望在JLabel中包含每个标记,并在gamePane内绘制它们,但是在它们的指定坐标上。所以我们需要能够用z轴定位。

GamePane 内部有JLabel ImageIcon,应构成背景。最重要的是我们想要创建标志

一些代码(可能没用): -

    gamePane = new JPanel();
    [...]

    public void paintFlagLabel() {
    for (Country currentCountry : risiko.getCountryList()) {
        JLabel flag = new JLabel();
        int x = currentCountry.getX();
        int y = currentCountry.getY();

        if (currentCountry.getOwningPlayer().equals(this.player)) {
            flag.setIcon(new ImageIcon(greenFlag));
        } else {
            flag.setIcon(new ImageIcon(redFlag));
        }
        String coordinates = "pos " + x + " " + y;
        gamePane.add(flag, coordinates);
        gamePane.revalidate();
        gamePane.repaint();
    }
}

1 个答案:

答案 0 :(得分:0)

  

我们正在重建一个有世界地图的游戏,并且应该在每个国家/地区展示旗帜。

您可以轻松地将JLabel添加到任何其他组件,包括Jlabel。

基本代码是:

META-INF/MANIFEST.MF
  

我们无法通过var名称添加标记。

你可以保留所有标志的Hashmap:

JLabel background = new JLabel( new ImageIcon(...) );
background.setLayout( null );

JLabel flag = new JLabel( new ImageIcon(...) );
flag.setSize( flag.getPrefferedSize() );
flag.setLocation(....);
background.add( flag );

然后,当您想要访问该标记时,只需使用Hashmap<String, JLabel> flags = new Hashmap<String, JLabel>() flags.add("theCountryName", theFlag); 的{​​{1}}方法。