java - 如何在监听器内迭代 JPanel 的子组件

标签 java swing jpanel event-listener componentlistener

我在 JPanel 上放置了一个“调整大小”监听器。

当监听器被触发时,我想迭代该 JPanel 的所有子组件。

我知道如何使用“e.getComponent()”在监听器内获取 JPanel 组件,但其中没有“getComponents()”可供迭代。

我想通过“e”对象来访问它,而不是使“item”成为类范围变量。

查看代码注释了解更多详细信息:

import java.awt.Color;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.border.LineBorder;

public class BottomTest extends JFrame {

private static final long serialVersionUID = 1L;

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new BottomTest().setVisible(true);
        }
    });
}

public BottomTest() {

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setTitle("Test");
    setSize(1000, 700);
    setLocationRelativeTo(null);

    JPanel container = new JPanel();
    container.setBorder(new LineBorder(Color.RED, 1));
    container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
    add(container);

    JPanel item = new JPanel();
    item.setBorder(new LineBorder(Color.GREEN, 1));
    item.setLayout(new BoxLayout(item, BoxLayout.Y_AXIS));
    item.addComponentListener(new ComponentListener() {
        public void componentHidden(ComponentEvent arg0) {}
        public void componentMoved(ComponentEvent arg0) {}
        public void componentShown(ComponentEvent arg0) {}
        public void componentResized(ComponentEvent e) {

            //HOW CAN I ITERATE THROUGH THE SUB-COMPONENTS OF "ITEM" HERE?
            //I.E I WANT TOO SEE THE "TEXTPANE" COMPONENT HERE

            //System.out.println(e.getComponent());
            //THE ABOVE DOES NOT CONTAIN THE USUAL .GETCOMPONENTS()
        }           
    });
    container.add(item);

    JTextPane textPane = new JTextPane();
    textPane.setText("Lorem Ipsum is simply dummy text of the printing and typesetting industry.");
    item.add(textPane);

}

}

最佳答案

由于您将监听器附加到 JPanel,因此您可以转换事件源

JPanel source = (JPanel) e.getComponent();

转换后,您可以使用 Container 类 API 方法迭代子组件(getComponent( int )getComponentCount(), getComponents)

关于java - 如何在监听器内迭代 JPanel 的子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22421343/

相关文章:

java - Spring构造函数注入(inject)和 super 调用冗长

java - 蛋白质序列显示

Java 身份验证程序问题

java - 我在这里缺少什么? (可能是显而易见的事情)

java - 当窗口大小改变时扩展框架以填充空间

java - 安全地包装连接池

使用 GUI 进行 Java swing 切换进程

java - SwingWorker 在完成工作后设置标志

java - 在另一个类中定义并在 JFrame 中使用的 JButtton 监听器

java - 如何在 Java 中获取实际的文件扩展名