我在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()
。