简体   繁体   English

如何从GridBagLayout列出JComponents?

[英]How to list JComponents from GridBagLayout?

I am trying to figure out how to print the component names and/or their values after a button is pressed. 我试图弄清楚如何在按下按钮后打印组件名称和/或它们的值。 I currently am using a GridBagLayout with 2 columns and 6 rows but I don't know how to traverse the layout or anything like that inside of my actionPerformed() method. 我目前正在使用具有2列和6行的GridBagLayout ,但是我不知道如何遍历布局或我的actionPerformed()方法内部的类似内容。 I think it may have to do with getContentPane() but I'm not entirely sure. 我认为这可能与getContentPane()但我不确定。

在此处输入图片说明

In the following code, I print: 在以下代码中,我打印:

            System.out.println(comp.getClass().getSimpleName() + 
                    " Bounds: " + comp.getBounds());

But for a much more comprehensive view of the component, change that to: 但是,为了更全面地了解该组件,请将其更改为:

            System.out.println(comp);

import java.awt.*;
import java.awt.event.ActionEvent;
import javax.swing.*;

class ListComponents {

    public static void listComponents(Container c) {
        Component[] components = c.getComponents();
        for (Component comp : components) {
            System.out.println(comp.getClass().getSimpleName() + 
                    " Bounds: " + comp.getBounds());
            if (comp instanceof Container) {
                listComponents((Container)comp);
            }
        }
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                final JPanel gui = new JPanel(new BorderLayout(3,3));

                JTree tree = new JTree();
                tree.setVisibleRowCount(8);
                gui.add(new JScrollPane(tree), BorderLayout.LINE_START);

                JToolBar tb = new JToolBar();
                gui.add(tb, BorderLayout.PAGE_START);
                Action list = new AbstractAction("List") {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        listComponents(gui);
                    }
                };
                tb.add(list);
                tb.add(new JToggleButton("Toggle"));
                tb.add(new JCheckBox("Check"));

                gui.add(new JScrollPane(new JTextArea("Default Text",3,20)));

                JOptionPane.showMessageDialog(null, gui);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency
        SwingUtilities.invokeLater(r);
    }
}

Output when tool-bar is on GUI 工具栏在GUI上时输出

JScrollPane Bounds: java.awt.Rectangle[x=0,y=35,width=81,height=147]
JViewport Bounds: java.awt.Rectangle[x=1,y=1,width=78,height=144]
JTree Bounds: java.awt.Rectangle[x=0,y=0,width=78,height=144]
CellRendererPane Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
ScrollBar Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
ScrollBar Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
JToolBar Bounds: java.awt.Rectangle[x=0,y=0,width=307,height=32]
 Bounds: java.awt.Rectangle[x=16,y=1,width=33,height=28]
JToggleButton Bounds: java.awt.Rectangle[x=49,y=1,width=50,height=28]
JCheckBox Bounds: java.awt.Rectangle[x=99,y=1,width=65,height=28]
JScrollPane Bounds: java.awt.Rectangle[x=84,y=35,width=223,height=147]
JViewport Bounds: java.awt.Rectangle[x=1,y=1,width=220,height=144]
JTextArea Bounds: java.awt.Rectangle[x=0,y=0,width=220,height=144]
ScrollBar Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
ScrollBar Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]

Output when tool-bar is dragged off GUI 工具栏从GUI拖动时输出

JScrollPane Bounds: java.awt.Rectangle[x=0,y=0,width=81,height=182]
JViewport Bounds: java.awt.Rectangle[x=1,y=1,width=78,height=179]
JTree Bounds: java.awt.Rectangle[x=0,y=0,width=78,height=179]
CellRendererPane Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
ScrollBar Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
ScrollBar Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
JScrollPane Bounds: java.awt.Rectangle[x=84,y=0,width=223,height=182]
JViewport Bounds: java.awt.Rectangle[x=1,y=1,width=220,height=179]
JTextArea Bounds: java.awt.Rectangle[x=0,y=0,width=220,height=179]
ScrollBar Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
ScrollBar Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]
MetalScrollButton Bounds: java.awt.Rectangle[x=0,y=0,width=0,height=0]

Assuming everything is contained inside a java.awt.Component , you can call getComponents() on the container. 假设所有内容都包含在java.awt.Component ,则可以在容器上调用getComponents() This will give you an array of Component objects which you can iterate over to print out whatever you like. 这将为您提供一组Component对象,您可以对其进行迭代以打印出所需的内容。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM