我有一个挥杆应用程序。这是我想要做的简化视图。
mainFrame
是包含应用程序中所有组件的父框架。它有一个叫jPanel
的孩子。
jPanel
有一个名为button
的孩子。点击button
后,我想删除' jPanel'来自mainFrame
并添加其他面板。
注意:buttom可能是jPanel
的直接孩子或jPanel
孩子的孩子(即:jPanel>> some_other_panel>>按钮)
基本上我需要Android拥有的BroadcastReciever类型的功能。 (Android BroadcastReciever Example
答案 0 :(得分:3)
"注意:buttom可能是jPanel的直接孩子或jPanel孩子的孩子"
不会发生。一个组件只能有一个父容器。
" jPanel有一个名为button的子项。点击按钮后,我想删除' jPanel'从mainFrame中添加一个不同的面板。"
比添加删除面板更简洁的方法是使用CardLayout
面板"分层" 并通过CardLayout
&#39导航; show()
,previous()
,next()
等方法。见How to Use CardLayout。请参阅一个简单的示例here,若您恰好使用的是GUI Builder工具,请参阅How to use CardLayout with Netbeans GUI Builder。即使您没有使用GUI Builder,我仍然会查看该链接以了解其工作原理。
答案 1 :(得分:0)
我最终做了以下事情。不是最好但是有效。
//get the container
Container tempContainer = MetricTablesX.this.getTopLevelAncestor();
if (tempContainer == null || tempContainer.getComponentCount() == 0) {
return;
}
//get the root pane
Component rootPane = tempContainer.getComponent(0);
if (rootPane == null || !(rootPane instanceof JRootPane)) {
return;
}
JRootPane pane = (JRootPane) rootPane;
if (pane == null || pane.getComponentCount() == 0) {
return;
}
//get the layer Pane
Component jLayerPane = pane.getComponent(1);
if (jLayerPane == null || !(jLayerPane instanceof JLayeredPane)) {
return;
}
JLayeredPane layerPane = (JLayeredPane) jLayerPane;
if (layerPane == null || layerPane.getComponentCount() == 0) {
return;
}
//get the junk panel
Component jPanel = layerPane.getComponent(0);
if (jPanel == null || !(jPanel instanceof JPanel)) {
return;
}
JPanel junkPanel = (JPanel) jPanel;
if (junkPanel == null || junkPanel.getComponentCount() == 0) {
return;
}
//get the main panel
Component mPanel = junkPanel.getComponent(0);
if (mPanel == null || !(mPanel instanceof JPanel)) {
return;
}
JPanel mainPanel = (JPanel) mPanel;
if (mainPanel == null || mainPanel.getComponentCount() == 0) {
return;
}
//get the dashHolder
for (int i = 0; i < mainPanel.getComponentCount(); i++) {
Component dPanel = mainPanel.getComponent(i);
if (dPanel == null || !(dPanel instanceof JPanel)) {
return;
}
JPanel dashHolderPanel = (JPanel) dPanel;
if (dashHolderPanel.getName().equalsIgnoreCase("dashHolderPanel")) {
RetailRegionDashboard retailRegionDash = new RetailRegionDashboard(cell.mtr);
dashHolderPanel.removeAll();
dashHolderPanel.add(retailRegionDash);
dashHolderPanel.revalidate();
dashHolderPanel.repaint();
}
}