Динамически удалить компонент из JPanel - PullRequest
9 голосов
/ 19 августа 2011

Я добавляю и удаляю компоненты динамически в JPanel.Добавление и удаление функций работает нормально, но когда я удаляю компонент, он удаляет последний компонент, а не компонент, который будет удален.

Как я могу решить эту проблему?

Ответы [ 2 ]

8 голосов
/ 07 апреля 2017

Довольно интересно, что я сталкиваюсь с той же проблемой, и я удивлен, что люди голосуют против другого ответа, поскольку он явно задает вопрос о динамически созданных Компонентах, а не компонентах, уже созданных под именем переменной, которое можно получить.вместо анонимно созданных объектов.

Ответ довольно прост.Используйте getComponents () для перебора массива компонентов, добавленных в JPanel.Найдите тип компонента, который вы хотите удалить, например, используя instanceof .В моем примере я удаляю все JCheckBoxes, добавленные в мою JPanel.

Обязательно выполните повторную проверку и перерисовку панели, в противном случае изменения не появятся

Компонент взят из java.awt.Component.

//Get the components in the panel
Component[] componentList = panelName.getComponents();

//Loop through the components
for(Component c : componentList){

    //Find the components you want to remove
    if(c instanceof JCheckBox){

        //Remove it
        clientPanel.remove(c);
    }
}

//IMPORTANT
panelName.revalidate();
panelName.repaint();
8 голосов
/ 27 сентября 2011

Используя метод Container.remove(Component), вы можете удалить любой компонент из контейнера. Например:

JPanel j = new JPanel();

JButton btn1 = new JButton();

JButton btn2 = new JButton();

j.add(btn1);

j.add(btn2);

j.remove(btn1);
...