我的問題是如何訪問Swing GUI元素樹(主窗口,JPanels,JFrames,JButtons,JTextFields等)並創建對該樹的引用。我需要將它保存在數據結構(如散列圖)中,而不是存儲在文件中(例如使用序列化)。我需要這個以後使用它將這些UI元素映射到代碼中的相應對象。訪問並創建Swing GUI元素的樹
編輯:
JFrame f = new JFrame("Basic GUI");
JPanel pnl1 = new JPanel();
JPanel pnl2 = new JPanel();
JPanel pnl3 = new JPanel();
JLabel lblText = new JLabel("Test Label");
JButton btn1 = new JButton("Button");
JTextField txtField = new JTextField(20);
public GUISample(){
pnl1.add(lblText);
pnl2.add(btn1);
pnl3.add(txtField);
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add(pnl2, BorderLayout.EAST);
f.getContentPane().add(pnl3, BorderLayout.WEST);
f.getContentPane().add(pnl1, BorderLayout.NORTH);
visitComponent(f);
}
private Map<String, Component> hashMap = new HashMap<String,Component>();
public Map<String, Component> getComponentsTree(){
return hashMap;
}
public void visitComponent(Component cmp){
// Add this component
if(cmp != null) hashMap.put(cmp.getName(), cmp);
Container container = (Container) cmp;
if(container == null) {
// Not a container, return
return;
}
// Go visit and add all children
for(Component subComponent : container.getComponents()){
visitComponent(subComponent);
}
System.out.println(hashMap);
}
只是爲了確保它很清楚:在給定的Swing應用程序中,您想要在整個組件樹的內存中創建一個數據結構,以及它們的所有父 - >子關係? –
是的,GUI元素樹的整個HIERARCHY被保存在一個數據結構中。 – 100798
您可以使用java.awt.Component.getComponents()來獲取子組件。我們可以看到一個如何使用它的例子嗎?也許有其他選擇? – jeff