【问题标题】:JDialog.pack() hides JLabelJDialog.pack() 隐藏 JLabel
【发布时间】:2014-04-01 14:07:44
【问题描述】:

我正在尝试用 java 编写一个表单,但是在将 JLabels 动态插入到当前 JDialog 并执行pack() 之后,窗口的大小被调整为最小。显示 JLabels,但我必须手动调整窗口大小。 这是插入 JLabel 的部分:

public void displayQuizz(Test quiz){
        int xLable = 44;
        int yLable = 41;
        int widthLable = 403;
        int heightLable = 70;
        int noOfQuestion = 1;
        for(Question question : quiz.getQuestions()){
            JLabel lblNewLabel = new JLabel(Integer.toString(noOfQuestion) + ". " + question.getStatement());
            lblNewLabel.setBounds(xLable, yLable, widthLable, heightLable);
            contentPanel.add(lblNewLabel);
            contentPanel.revalidate();
            contentPanel.repaint();
            this.pack();

            noOfQuestion++;
            yLable += heightLable;
        }



    }

【问题讨论】:

  • 不要使用setBounds()

标签: java swing jlabel jdialog pack


【解决方案1】:

pack() 方法将Window(其中JFrameJDialog 是其子类)的大小设置为首选大小

首选尺寸取决于

  • LayoutManager,它接受组件的排列和 考虑到他们喜欢的尺寸
  • 组件本身,如果它没有布局管理器

由于您在示例中没有使用布局管理器(并手动设置标签的边界),您还必须自己指定首选尺寸(请参阅getPreferredSize(),默认是0x0,就是你遇到的问题)。

我鼓励您习惯始终使用布局管理器(其中有很多,如果没有满足您的需求,您可以轻松编写自己的布局管理器策略)。

【讨论】:

  • 谢谢。我使用的是绝对布局
猜你喜欢
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
相关资源
最近更新 更多