当前位置: 首页 > 知识库问答 >
问题:

如何在JTabbedPane中读取panel的组件并将结果添加到组件中

夹谷阳夏
2023-03-14

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、示例ab1类:

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个答案

公冶光亮
2023-03-14

如果您希望拥有容器中的所有元素(如JPanel或JTabbedPane等)您需要手动收集它们,因为getComponents()只读取容器的直接子级。

您需要将以下函数添加到示例类中:

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());
 类似资料:
  • 我正在学习JSwing,我发现了GridBagLayout。 我试图创建一个简单的计算器,我添加了多个JPanel设置每个首选大小,但当我调整窗框大小时,面板也不会调整大小。然后我发现了Gridbag的布局。 但我得到的是:GridBagLayout的计算器错误 } 应该是这样的:正确的计算器 我试过: 要锚定。。。但它不起作用, 创建多个JPanel(一个带有GridLayout),但不起作用

  • 我正在尝试更新我编写的程序的GUI。在新的GUI上,我有一个JFrame,其中包含一个JPanel,它有一个JTabbedPane和上面的两个按钮。 在JTabbedPane中,我有三个JPanel,其中包含不同的组件。(如按钮、文本字段等)所以现在我必须让所有组件根据类型对其执行相同的操作。 如果有一个文本字段,我必须做一些事情,但如果有一个按钮,我必须做其他事情。 所以之前我做过这样的事情:

  • 我需要按、和的间隔(步长为5)对数据进行分组。对于每个组,我要估计中位数 我可以分组数据并计算的中值,但是我不知道如何添加的间隔: 正确的应该结构如下(数字可能不同,这只是数据结构的一个例子): 更新: 最终结果应该是这样的。因此,基本上,和分别是上下限:

  • 我的任务是用hibernate的数据值填充prime faces数据表。我们可以通过这个查询获取表中的所有记录 将从表雇员中获取所有记录,雇员字段有两个字段名称,以及将其转换为列表的Hibernate查询 列表=查询。list();我想将其转换为数组列表,其中包含两个字段name,age和hibernate中的所有对象 然后用 有人能举例说明吗

  • 本文向大家介绍如何读取CSV文件并将值存储到C#中的数组中?,包括了如何读取CSV文件并将值存储到C#中的数组中?的使用技巧和注意事项,需要的朋友参考一下 CSV文件是逗号分隔的文件,用于以有组织的方式存储数据。它通常以表格形式存储数据。大多数企业组织将其数据存储在CSV文件中。 CSV文件是逗号分隔的文件,用于以有组织的方式存储数据。它通常以表格形式存储数据。大多数企业组织将其数据存储在CSV文

  • 问题内容: 我有一个 JFrame 。 我也有一个 Box 类,它扩展了 Component 。该box类具有一个 paint 方法,该方法可以创建一个填充的矩形。 当我将这些Box组件的多个添加到我的JFrame时,当我在JFrame上调用 重绘 时,仅显示最近添加的一个。 我看了一下布局管理器,但是我不确定那不是我想要的。我所希望的是能够在屏幕上的任何位置制作整个矩形的动画。 (我还尝试创建一