【问题标题】:How to add components to JDialog如何将组件添加到 JDialog
【发布时间】:2012-06-29 11:24:46
【问题描述】:
   d1=new JDialog();
   d1.setSize(200, 100);
   t1=new JTextField();
   t1.setBounds(10,10,40,20);
   d1.add(t1);

我想在JDialog中添加TextField、Button等组件...

【问题讨论】:

  • 在构造函数和布局中使用组件大小的建议。 null 布局在现实世界中不起作用。
  • 显示 ASCII 艺术或绘图,说明它出现时的外观。如果可调整大小,则显示第二个额外的宽度和高度。

标签: java swing layout-manager jdialog


【解决方案1】:

1) 首先创建一个Jpanel

JPanel pan=new JPanel();
pan.setLayout(new FlowLayout());

2) 将组件添加到该 JPanel

pan.add(new JLabel("label"));
pan.add(new JButton("button"));

3) 创建JDialog

JDialog jd=new JDialog();

4) 将 JPanel 添加到 JDialog

jd.add(pan);

【讨论】:

  • 我不能为 Jpanel 采用任何布局
  • 你为什么不用你的代码(和BorderLayout)试试看,看看会发生什么?
  • BorderLayout 的哪个部分您有理解困难?当您使用BorderLayout 时会发生什么?添加屏幕截图。
  • 是的,它正在使用 BorderLayout,但底部没有出现
  • 都是 404。我不会再花时间在这上面了。
【解决方案2】:

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

d1.setLayout(null);

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

【讨论】:

    【解决方案3】:
    【解决方案4】:

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

    【讨论】:

    • 唯一的区别是需要将 JDialog 添加到父容器(如 JFrame) ??? JDialog 的所有者可以更少。
    【解决方案5】:

    我不确定你真的希望你的组件如何布局,但下面的 sn-p 应该可以实现我猜你正在尝试用你当前的代码做的事情。尽量使用 LayoutManager 的、布局约束、首选/最大/最小尺寸,并避免使用 setLocation/setSize/setBounds。

    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();
                }
            });
        }
    
    }
    

    您可能应该阅读有关LayoutManager 的信息。花点时间去了解它,了解它们是如何工作的以及存在的不同的。你不会后悔花几分钟的时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多