Java 如何向JDialog添加组件

Java 如何向JDialog添加组件,java,swing,layout-manager,jdialog,Java,Swing,Layout Manager,Jdialog,我想在JDialog中添加一些组件,比如TextField、Button 您必须确保不使用布局管理器 d1=new JDialog(); d1.setSize(200, 100); t1=new JTextField(); t1.setBounds(10,10,40,20); d1.add(t1); 默认情况下,使用边界布局。使用布局管理器很好,但真正好的布局管理器,使您的窗口可调整大小等,很难理解。在没有布局管理器的情况下,您可以在尝试时指定边界。查看此示例和教

我想在JDialog中添加一些组件,比如TextField、Button

您必须确保不使用布局管理器

   d1=new JDialog();
   d1.setSize(200, 100);
   t1=new JTextField();
   t1.setBounds(10,10,40,20);
   d1.add(t1);

默认情况下,使用边界布局。使用布局管理器很好,但真正好的布局管理器,使您的窗口可调整大小等,很难理解。在没有布局管理器的情况下,您可以在尝试时指定边界。

查看此示例和教程。
1.
2.
3.

1)首先创建一个Jpanel

d1.setLayout(null);
2) 将组件添加到该JPanel

JPanel pan=new JPanel();
pan.setLayout(new FlowLayout());
3) 创建JDialog

pan.add(new JLabel("label"));
pan.add(new JButton("button"));
4) 将JPanel添加到JDialog

JDialog jd=new JDialog();

由于JDialog是一个java.awt.Container,您可以像添加到JFrame一样向JDialog添加组件。如果要设置要添加的组件的大小,应使用布局管理器或将布局设置为null。

我不确定您是否真的希望组件的布局方式,但下面的代码片段应该可以实现我猜您正在使用当前代码尝试的目的。尽量使用LayoutManager、布局约束、首选/最大/最小尺寸,避免使用setLocation/setSize/setBounds

jd.add(pan);

你可能应该读一读关于的书。花点时间仔细检查,了解它们是如何工作的,以及存在的不同的。你不会后悔花了几分钟在这上面。

我不能为JPanelw使用any布局吗?你为什么不试着用你的代码(和
BorderLayout
)看看会发生什么?你对
BorderLayout
的哪一部分理解有困难?使用
BorderLayout
时会发生什么情况?添加一个屏幕截图。是的,它正在使用BorderLayout,但是底部部分没有显示在404上。我将不再在这方面投入更多的时间。在构造器和布局中使用组件大小的建议
null
布局在现实世界中不起作用。显示ASCII艺术或绘图,说明它出现时的外观。如果可以调整大小,则显示一个具有额外宽度和高度的秒。唯一的区别是需要将JDialog添加到父容器(如JFrame)中???JDialog可以是无所有者的。
import java.awt.FlowLayout;

import javax.swing.BorderFactory;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Test5 {

    protected static void initUI() {
        JDialog dialog = new JDialog();
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0));
        JTextField textfield = new JTextField(8);
        textfield.setBounds(10, 10, 40, 20);
        panel.add(textfield);
        dialog.add(panel);
        dialog.setSize(200, 100);
        dialog.setLocationRelativeTo(null);
        dialog.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                initUI();
            }
        });
    }

}