动态更改JDialog的宽度

时间:2011-07-27 13:44:30

标签: java swing jlabel jdialog

我创建了一个包含JLabel的JDialog。因为基于用户输入而改变的文本长度可以包含大量字符,所以需要根据JDialog的长度大小动态地改变JDialog的长度。我尝试过pack()方法,但事实并非如此。谁能给我一些提示?提前致谢!

5 个答案:

答案 0 :(得分:6)

  1. getPreferredSize JLabel - 基本上你必须从textLength获得JLabel像素,有3种正确方法,但我喜欢:

    SwingUtilities.computeStringWidth(FontMetrics fm, String str)
    
  2. 现在您可以setPreferredSize正确JLabel了(请通过defalut将{+ 1 - +10添加到返回Integer的{​​{1}} })

  3. 在顶级容器(SwingUtilities.computeStringWidth)上调用pack();

答案 1 :(得分:3)

尝试在JDialog上调用validate()我刚才意识到这不起作用。


这是一个讨论这个问题的好thread。我建议听听@Andrew Thompson提供的答案和建议,他实际上是一位杰出的用户。

答案 2 :(得分:3)

另一种方法是将文本放入JTextArea并将其放入JScrollPane

E.G。

Text Area in Scroll Pane

代码

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

class ExpandingText {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                final String s = 
                    "The quick brown fox jumped over the lazy dog.  ";

                final JTextArea textArea = new JTextArea(s,5,30);
                textArea.setWrapStyleWord(true);
                textArea.setLineWrap(true);
                textArea.setEditable(false);
                textArea.setFocusable(false);

                JButton button = new JButton("Add Text");
                button.addActionListener(new ActionListener(){
                        public void actionPerformed(ActionEvent ae) {
                            textArea.append(s);
                        }
                    });

                JPanel panel = new JPanel(new BorderLayout(3,3));
                panel.add(button, BorderLayout.NORTH);
                panel.add(new JScrollPane(textArea), BorderLayout.CENTER);

                JOptionPane.showMessageDialog(null, panel);
            }
        });
    }
}

答案 3 :(得分:2)

为什么pack()不适合你?

您可以使用setSize并将宽度偏离JLabel的宽度。只要用户更改输入,就调用此方法。

答案 4 :(得分:1)

尝试使用validate()方法,这会导致JDialog再次布局其子组件

修改

这显然不起作用