在之前的问题中,我询问了如何添加动态panels
,并且在Stackoverflow成员的帮助下,我可以实现我的目标。
public class Reference {
JFrame frame = new JFrame();
MainPanel main;
JButton addButton = new JButton();
JButton removeButton = new JButton();
List<SubPanel> subPanels = new ArrayList<SubPanel>();
public static void main(String[] args) {
new Reference();
}
public Reference() {
main = new MainPanel();
frame.add(main);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(addButton, BorderLayout.EAST);
frame.add(removeButton, BorderLayout.WEST);
frame.pack();
frame.setVisible(true);
addButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt) {
main.addSubPanel();
main.revalidate();
}
});
}
private class SubPanel extends JPanel {
JTextField firstName = new JTextField(15);
public SubPanel() {
this.add(firstName);
}
public class MainPanel extends JPanel {
public MainPanel() {
}
public void addSubPanel() {
SubPanel panel = new SubPanel();
add(panel);
subPanels.add(panel);
}
}
}
但是,我无法动态删除的下一个问题是panels
。我尝试了很多方法但没有成功。
我尝试在removeSubPanel
中使用MainPanel
方法:
public void removeSubPanel() {
this.getParent().remove(SubPanel);
}
对于removeButton
此代码:
removeButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt) {
main.removeSubPanel();
main.revalidate();
}
});
我无法理解什么是错的。可能removeButton
actionlistener不正确。
任何帮助都将不胜感激。
答案 0 :(得分:0)
在您的MainPanel课程中:Services Summary...
Service "orcl.168.0.104" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB.168.0.104" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
。这会添加变量&#39; panel&#39;引用的组件。到了这个&#34;这个&#34; MainPanel的实例。
使用代码add(panel);
,您尝试从MainPanel实例的父级中删除组件。 (另请注意,变量this.getParent().remove(SubPanel);
永远不会在您提供的代码中定义)您需要从实际包含它的组件中删除该组件。由于MainPanel类中的add方法已添加到SubPanel
,因此您需要从this
中删除remove方法:
this
您还需要决定在单击按钮时如何选择要删除的组件。也许是你存储在列表中的第一个?
public void removeSubPanel(final JComponent subPanel) {
this.remove(subPanel);
}