从子级更新父类UI

时间:2014-03-11 18:23:50

标签: java swing

我有一个挥杆应用程序。这是我想要做的简化视图。

enter image description here

mainFrame是包含应用程序中所有组件的父框架。它有一个叫jPanel的孩子。

jPanel有一个名为button的孩子。点击button后,我想删除' jPanel'来自mainFrame并添加其他面板。

注意:buttom可能是jPanel的直接孩子或jPanel孩子的孩子(即:jPanel>> some_other_panel>>按钮)

基本上我需要Android拥有的BroadcastReciever类型的功能。 (Android BroadcastReciever Example

2 个答案:

答案 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();
    }
}