我创建了一个包含JLabel的JDialog。因为基于用户输入而改变的文本长度可以包含大量字符,所以需要根据JDialog的长度大小动态地改变JDialog的长度。我尝试过pack()方法,但事实并非如此。谁能给我一些提示?提前致谢!
答案 0 :(得分:6)
getPreferredSize
JLabel
- 基本上你必须从textLength
获得JLabel
像素,有3种正确方法,但我喜欢:
SwingUtilities.computeStringWidth(FontMetrics fm, String str)
现在您可以setPreferredSize
正确JLabel
了(请通过defalut将{+ 1 - +10添加到返回Integer
的{{1}} })
SwingUtilities.computeStringWidth
)上调用pack();
。答案 1 :(得分:3)
答案 2 :(得分:3)
另一种方法是将文本放入JTextArea
并将其放入JScrollPane
。
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
再次布局其子组件
修改强>
这显然不起作用