Добавить JLayeredPane Swing в JPanel - PullRequest
0 голосов
/ 30 ноября 2018

У меня в методе "Недопустимая позиция компонента", есть ли у вас идея, почему у меня это есть?

Я выполняю этот метод для размещения ImageIcon, а также задаю ось Z для ImageIcon.

    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: все 2-мерные массивы являются массивами 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)

1 Ответ

0 голосов
/ 30 ноября 2018

Метод, который вы хотите вызвать в последней строке Placer -метода: Component.add(Component comp, int index); С index, равным:

index - позиция, в которую нужно вставить компонент, или-1, чтобы добавить компонент в конец

Итак, с помощью lp.add(panel, -1); вы избавляетесь от исключения .

Я не уверен, почему вывызывайте его с помощью объекта-оболочки Integer, но, пожалуйста, обратите внимание, что в действительности вы звоните Component.add(Component comp, Object constraints);, потому что Integer - это Object.Здесь предполагается, что объект имеет ограничения

- объект, выражающий ограничения макета для этого компонента

И поскольку Integer не является допустимым объектом ограничений макета,IllegalArgumentException брошен.

...