Java 有人知道如何轻松确定框架上摆动组件的组成吗?不使用netbeans或windows builder

Java 有人知道如何轻松确定框架上摆动组件的组成吗?不使用netbeans或windows builder,java,swing,layout-manager,Java,Swing,Layout Manager,我的意思是,我想手动操作,但为了确定位置,我想知道还有什么替代方法 例如,程序: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class testLotus { public static void main(String[] args) { JFrame gui= new JFrame(); JLabel h1 = new JLabel("Some

我的意思是,我想手动操作,但为了确定位置,我想知道还有什么替代方法

例如,程序:

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

public class testLotus {

    public static void main(String[] args) {
        JFrame gui= new JFrame();
        JLabel h1 = new JLabel("Some text");
        JTextField text = new JTextField(15);

        JPanel panel = new JPanel();

        h1.setBounds(180,50,120,20); //this is it
        text.setBounds(180,90,120,20); // and this

        panel.setLayout(null);
        panel.add(h1);
        panel.add(text);

        gui.getContentPane().add(panel);
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.setSize(800,600 );
        gui.setVisible(true);
    }
}

您可以通过遍历组件并打印所有感兴趣的属性来检查组件的位置。例如:

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

public class TestLotus {
    public static void main(final String[] arguments) {
        SwingUtilities.invokeLater(() -> new TestLotus().createAndShowGui());
    }

    private void createAndShowGui() {
        final JFrame frame = new JFrame("Stack Overflow");
        frame.setBounds(100, 100, 800, 600);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JLabel h1 = new JLabel("Some text");
        JTextField text = new JTextField(15);

        JPanel panel = new JPanel();

        h1.setBounds(180,50,120,20); //this is it
        text.setBounds(180,90,120,20); // and this

        panel.setLayout(null);
        panel.add(h1);
        panel.add(text);

        frame.getContentPane().add(panel);
        frame.setVisible(true);

        printComponents(frame, "");
    }

    private void printComponents(Container container, String indent) {
        for (Component component : container.getComponents()) {
            System.out.println(indent + "component.getClass().getName(): " 
                               + component.getClass().getName());
            System.out.println(indent + "component.getBounds(): " 
                               + component.getBounds());

            if (component instanceof Container) {
                printComponents((Container) component, indent + "    ");
            }
        }
    }
}
您的输出将如下所示:

component.getClass().getName(): javax.swing.JRootPane
component.getBounds(): java.awt.Rectangle[x=9,y=38,width=782,height=553]
    component.getClass().getName(): javax.swing.JPanel
    component.getBounds(): java.awt.Rectangle[x=0,y=0,width=782,height=553]
    component.getClass().getName(): javax.swing.JLayeredPane
    component.getBounds(): java.awt.Rectangle[x=0,y=0,width=782,height=553]
        component.getClass().getName(): javax.swing.JPanel
        component.getBounds(): java.awt.Rectangle[x=0,y=0,width=782,height=553]
            component.getClass().getName(): javax.swing.JPanel
            component.getBounds(): java.awt.Rectangle[x=0,y=0,width=782,height=553]
                component.getClass().getName(): javax.swing.JLabel
                component.getBounds(): java.awt.Rectangle[x=180,y=50,width=120,height=20]
                component.getClass().getName(): javax.swing.JTextField
                component.getBounds(): java.awt.Rectangle[x=180,y=90,width=120,height=20]

请解释什么是“swing组件的组成”?在JFrame.pack和/或JFrame.setVisible(true)之后是,您希望完成布局;否则,输出就不那么有趣了。(由于标签和文本字段是明确定位的,并且面板的布局是
null
,因此这些组件的坐标仍然可见。)在上面的示例中,调用
printComponents(frame,”)是在框架可见后生成的。返回NullLayout,这(非常确定)只是你的答案在这里没有被提升的一个原因,而且在我的情况下,我使用了OP中的代码,所以这不是我的决定。我更喜欢尽可能地使用布局管理器,在这种情况下,我认为使用
null
布局对于这个问题并不重要(至少就我的理解而言)。获得选票很好,但我的主要目标是帮助人们解决编程问题。请随时保存您的投票以获得其他答案…:-)1.我使用了OP中的代码-今天和昨天有多少次类似…:-)2.