[英]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);
}
}
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]
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.