Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 扩展JFrame后如何确定JPanel的位置_Java_Swing_Jpanel_Layout Manager_Flowlayout - Fatal编程技术网

Java 扩展JFrame后如何确定JPanel的位置

Java 扩展JFrame后如何确定JPanel的位置,java,swing,jpanel,layout-manager,flowlayout,Java,Swing,Jpanel,Layout Manager,Flowlayout,我正在尝试使用JavaSwing制作程序的接口。我有一个容器,其中添加了3个JPanel和一些组件。问题是,当我展开框架时,所有这3个JPanel都会一个接一个地出现在第一行 这是我的密码: import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.J

我正在尝试使用JavaSwing制作程序的接口。我有一个容器,其中添加了3个JPanel和一些组件。问题是,当我展开框架时,所有这3个JPanel都会一个接一个地出现在第一行

这是我的密码:

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import javax.swing.border.LineBorder;

public class GraphicRefact extends JFrame {
    private Container container;

    private JButton button2;
    private JButton button1;
    private JTextField textField01;
    private JLabel label01;

    private JButton button03;
    private JButton button04;
    private JTextField textField03;
    private JLabel label03;

    private JButton button02;
    private JButton button01;
    private JTextField textField02;
    private JLabel label02;

    public static void main(String[] args) {
        new GraphicRefact();
    }

    public GraphicRefact() {
        initializeComponents();

        setTitle("Title");
        setSize(500, 150);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        container = new JPanel();


        JPanel panel01 = new JPanel();

        panel01.add(label01);
        panel01.add(textField01);
        panel01.add(button2);
        panel01.add(button1);
        panel01.setBorder(new LineBorder(Color.BLACK, 3));
        container.add(panel01);



        JPanel panel02 = new JPanel();

        panel02.add(label02);
        panel02.add(textField02);
        panel02.add(button02);
        panel02.add(button01);
        container.add(panel02);

        JPanel panel03 = new JPanel();

        panel03.add(label03);
        panel03.add(textField03);
        panel03.add(button03);
        panel03.add(button04);
        container.add(panel03);

        add(container);

    }

    private void initializeComponents() {

        button1 = new JButton("Open");
        button2 = new JButton("Close");
        textField01 = new JTextField("Choose the path...");
        label01 = new JLabel("Choose File: ");

        button01 = new JButton("Button01");
        button02 = new JButton("Button02");
        textField02 = new JTextField("Choose the path...");
        label02 = new JLabel("Choose Dir:");

        button03 = new JButton("Button03");
        button04 = new JButton("Button03");
        textField03 = new JTextField("Choose the path...");
        label03 = new JLabel("Choose Dir:");
    }

}
下面是我展开框架前后程序的外观

之前:

之后:

所以,即使在我展开框架之后,我希望程序将这3个JPanel放在cotainer的中间


谢谢大家!

你必须使用合适的工具。看看这里的例子。BoxLayout似乎正是您想要的。

我看不出您在哪里定义了任何位置,如果您需要了解如何完成,可以从这里开始


java swing的内置布局管理器没有那么有用。 你应该用这个

frame.setLayout(null);
component.setLocation(x, y);
frame.add(component);
您可以设置gridLayout并将这些元素放入其中

JPanel jp = new JPanel();
GridLayout gl = new GridLayout(3,4); //3 rows, 4 columns
jp.setLayout(gl);
完成此操作后,只需按顺序将元素放入布局中

jp.add(label1);
jp.add(button1);
//etc...

试试像<代码>容器=新的JPanel(新的GridLayout(0,1))不要使用JPanel的默认FlowLayout,而是使用更强大的布局嵌套JPanel。您可以在此处找到布局管理器教程:,也可以在此处找到指向Swing教程和其他Swing资源的链接:。您好,欢迎使用SO:)请注意,实际上不建议使用绝对组件定位。如前所述,Swing设计用于以优雅的方式管理组件大小和定位,并且独立于屏幕大小和分辨率。