我有一个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;
}
}
答案 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()
函数的空检查。