【发布时间】:2019-07-26 17:23:44
【问题描述】:
以下示例将 JComboBox 放置在 Frame 上并加载 5 个项目。
应用程序运行时,显示组合框,看到的是“Long Item...”
在不知道实际激活组合框的情况下,用户不知道实际可见的记录。
请记住,这实际上是一个动态加载的 JComboBox。仅在示例中使用硬编码值。结果,最长字符串的长度直到运行时才可用。
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class JComboBoxTestLength {
JFrame f;
JComboBoxTestLength (){
f=new JFrame("ComboBox Example");
String country[]={"Long Item 5","Long Item 2","Long Item 1","Long Item 8","Long Item 4"};
JComboBox cb=new JComboBox(country);
cb.setBounds(50, 50,90,20);
f.add(cb);
f.setLayout(null);
f.setSize(400,500);
f.setVisible(true);
}
public static void main(String[] args) {
new JComboBoxTestLength ();
}
}
一些线程表示要避免使用 setPreferredSize()。
虽然我可以将 setBounds() 值设置为足够长,但希望它看起来美观,并希望根据最长的字符串 + 2 或类似的东西来计算它。
是否可以计算 JComboBox 的宽度以避免看到任何文本出现“...”?
【问题讨论】:
-
jComboBox1.setToolTipText(jComboBox1.getSelectedItem().toString()); -
“动态调整 JComboBox 的宽度以避免在所有场景中出现'...'” 让布局来处理它。哦,
f.setLayout(null);和 不要 那样做。 Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作,在不同的语言环境中使用不同的 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them 以及 white space 的布局填充和边框。 -
我不确定为什么(以及谁做了)我的回答被否决了。这是您当前问题的解决方案。除了最佳实践,解决方案可以解决您的问题:github.com/fiveobjects/reference/blob/master/java/misc/src/main/…
-
@fiveelements 您想将此评论添加到您的答案中吗?我不是反对者,但这可能是由于解决方案的质量。 “解决方案有效”是必不可少的,但还不够。赞成/反对投票反映了答案/问题的质量。在这种情况下,我认为您提出的解决方案质量不高。
-
我尝试了来自 Fiveelements 的代码,但它抛出了 StackOverflowError。尽管组合框足够宽,但它看起来异常宽。我从答案中收集到的是没有直接的方法,需要与布局管理器一起调整自身大小。
标签: java swing layout-manager jcombobox null-layout-manager