将JLayeredPane Swing添加到JPanel

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将JLayeredPane Swing添加到JPanel相关的知识,希望对你有一定的参考价值。

我的方法中有一个“非法组件位置”,你知道为什么我有这个吗?

我执行这个方法来放置一个ImageIcon,并为ImageIcon设置Z轴。

    public void Placer(ImageIcon a, int x, int y, int z) {
    JPanel panel = (JPanel) this.getContentPane();

    JLayeredPane lp =  getLayeredPane();
    lp.setPreferredSize(new Dimension(100,100));

    panel.setLayout(null);
    JLabel image = new JLabel(a);
    panel.add(image);
    Dimension size = image.getPreferredSize();
    image.setBounds(x, y, size.width, size.height);
    lp.add(panel, new Integer(z));

}

我打电话的时候

        for (int y = 0,y1=0; y < 910; y += 35,y1++) {
        for (int x = 0,x1=0; x < 910; x += 35,x1++) {
            Placer(this.affichageBatiment[x1][y1], x, y, -5);
            Placer(this.affichageAgentEquipe1[x1][y1], x, y,-3);
            Placer(this.affichageAgentEquipe2[x1][y1],x,y,-2);

        }
    }

PS:所有的2d数组都是ImageIcon的数组,我有这个错误

Exception in thread "main" java.lang.IllegalArgumentException: illegal component position
at java.awt.Container.addImpl(Container.java:1098)
at javax.swing.JLayeredPane.addImpl(JLayeredPane.java:231)
at java.awt.Container.add(Container.java:975)
at Fenetre.Placer(Fenetre.java:69)
at Fenetre.afficherTout(Fenetre.java:146)
at Fenetre.<init>(Fenetre.java:54)
at Tournoi.LancerTournoi(Tournoi.java:34)
at Main.main(Main.java:14)
答案

你想在最后一行Placer方法中调用的方法是Component.add(Component comp, int index);index是:

index - 插入组件的位置,或-1以将组件附加到末尾

所以,使用lp.add(panel, -1);你可以摆脱异常。

我不确定,为什么你用包装对象Integer称它为但请注意,实际上你正在调用Component.add(Component comp, Object constraints);因为Integer是一个Object。这里,对象应该是

constraints - 表示此组件的布局约束的对象

并且因为Integer不是有效的布局约束对象,所以IllegalArgumentException被抛出。

以上是关于将JLayeredPane Swing添加到JPanel的主要内容,如果未能解决你的问题,请参考以下文章

Java Swing - 如何在另一个面板上显示一个面板?

Java:为不同层组件定义mouseAdapter的jLayeredPane问题

在现有的 JPanel 上绘制 JLayeredPane

尝试使用 JLayeredPane 拖动某些东西

将 Swing 组件添加到容器的标准方法?

Java Swing:将选项卡添加到 JPanels