Swing UI延迟添加和删除元素



我在inputWidget和outputWidget中都存储了一个表单。按钮addInput和addOutput将在secondary InOutPanel中显示两种不同的形式。

但是,通过单击按钮在窗体之间移动时会有明显的延迟。事实上,当我试图点击表单时,它会发生变化。并且仍然有一些来自上一个表单的可见图纸。

我尝试使用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                      
                }                   
            });
        }
    }); 

更好的设计是使用Card Layout来容纳输入和输出面板。然后,您可以根据需要交换面板。CardLayout将为您管理面板的重新验证和重新喷漆。

进行更改后,需要在secondaryInOutPanel上调用revalidate()和/或repaint()

最新更新