Swing UI Задержка добавления и удаления элементов

У меня есть форма, хранящаяся в inputWidget и outputWidget. Кнопки addInput и addOutput будут отображать две разные формы в secondInOutPanel.

Однако при перемещении между формами при нажатии кнопок происходит значительная задержка. На самом деле это меняется, когда я пытаюсь нажать на форму. И есть еще некоторые видимые рисунки из предыдущей формы.

Я пытался использовать SwingUtilities, но это привело к тому, что задержка была худшей.

    secondaryInOutPanel = new JPanel(new BorderLayout());
    secondaryInOutPanel.setMinimumSize(new Dimension(200,400));     

    JPanel btnPanel = new JPanel();
    outinPanel.add(btnPanel, BorderLayout.NORTH);

    JButton addInput = new JButton("Add Input");
    btnPanel.add(addInput);
    addInput.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            secondaryInOutPanel.removeAll();                                
            secondaryInOutPanel.add(inputWidget, BorderLayout.NORTH);               
            JButton addBtn = new JButton("Save Input");
            secondaryInOutPanel.add(addBtn, BorderLayout.SOUTH);
            addBtn.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub                      
                }                   
            });
        }
    });

    JButton addOutput = new JButton("Add Output");
    btnPanel.add(addOutput);
    addOutput.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            secondaryInOutPanel.removeAll();                            
            secondaryInOutPanel.add(outputWidget, BorderLayout.NORTH);              
            JButton addBtn = new JButton("Save Output");
            secondaryInOutPanel.add(addBtn, BorderLayout.SOUTH);
            addBtn.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub                      
                }                   
            });
        }
    }); 

2 ответа

Решение

Лучшим дизайном является использование макета карты для размещения ваших панелей ввода и вывода. Тогда вы можете просто поменять панели по мере необходимости. Затем Card Layout будет управлять повторной проверкой и перекрашиванием панели для вас.

Вам нужно позвонить revalidate() и или repaint() на secondaryInOutPanel после внесения изменений.

Другие вопросы по тегам