如何阅读JTabbedPane中的面板组件并将结果添加到组件中

时间:2014-05-09 06:10:20

标签: java swing jpanel jtabbedpane

我有一个Swing GUI应用程序,其中包含JTabbedPane和多个面板。 它有大约9个Jpanels,在第一个JPanel中有四个JPanels,这些Jpanels包含一些摇摆组件。 我已经设置了这些面板名称。

我的问题是:我能够在第一个标签面板中阅读这些组件,但问题是无法获取面板的名称并继续进行。

代码如下:

1.,样本类:

import java.awt.Component;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JPanel;

public class Sample {

    public Sample() {}

    public List<Component> getComponents(int id , Object obj) {
        List<Component> result = new ArrayList<Component>();
        if (id == 1 && obj instanceof ExampleTab1) {
            Component[] component =((ExampleTab1)obj).getContentPanel().getComponents();
            for (Component comp : component) {
                if (comp instanceof JPanel) {                                              
                    String compName = ((JPanel)comp).getName().toString();
                    if (compName.equals("panelResult")) {
                        //do the stuff
                    }
                }
            }
        }
        return result;
    }
}

2.,ExampleTab1类:

import javax.swing.JPanel;

public class ExampleTab1 {
    public ExampleTab1() { }
    public JPanel getContentPanel()  {
        JPanel contentPane = new JPanel();
        //all the components added to the panel 
        return contentPane;
    }
}

1 个答案:

答案 0 :(得分:0)

如果你想拥有Container中的所有元素(比如JPanel或JTabbedPane等等),你需要手动收集它们,因为getComponents()只是读取Container的直接子元素。

您需要将以下函数添加到Sample类:

public List<Component> getAllComponents(Container container) {
    Component[] components = container.getComponents();
    List <Component> result = new ArrayList<Component>();
    for (Component component : components) {
        result.add(component);
        if (component instanceof Container) {
            result.addAll(getAllComponents((Container) component));
        }
    }
    return result;
}

您需要替换以下代码:

Component[] component =((ExampleTab1)obj).getContentPanel().getComponents();
使用此代码:
List<Component> components = getAllComponents(((ExampleTab1)obj).getContentPanel());
并且如果您的组件没有名称,请不要忘记getName()函数的空检查。