【发布时间】:2011-04-06 15:30:30
【问题描述】:
我有,两个组件 JTextField 和 JComboBox 有同样的问题,我认为我正在寻找的解决方案可以解决所有组件的问题。
我已将组件的大小设置为默认值,因此它们的大小适合我提供给它的初始内容。当我将组件的内容更改为超出组件的区域时,我看不到整个文本,我希望我的组件调整大小以适应文本。
我怎样才能做到这一点?
更新:
frame 上的 pack() 只放大了文本字段,我怎么能做同样的事情并放大组合框?
更新:
private class ComboBoxRenderer extends JLabel implements ListCellRenderer {
private static final long serialVersionUID = 752379460716217273L;
Dimension maxSize=new Dimension();
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
setText(value.toString());
Dimension size = getPreferredSize();
if(maxSize.width<size.width)
maxSize.width=size.width;
if(maxSize.height<size.height)
maxSize.height=size.height;
resolutionDescriptor_ComboBox.setPreferredSize(maxSize);
return this;
}
}
这行得通,效率不是很高,但这是第一步,事情是,它没有考虑按钮图像的大小,所以一些文本仍然没有显示,但是组件调整大小,你有没有建议?
亚当。
答案:
这与 pack() 一起成功,无需重新验证。
private class ComboBoxRenderer extends JLabel implements ListCellRenderer {
private static final long serialVersionUID = 752379460716217273L;
Dimension maxSize=new Dimension();
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
setText(value.toString());
Dimension size = getPreferredSize();
if(maxSize.width<size.width) {
maxSize.width=size.width;
resolutionDescriptor_ComboBox.setPrototypeDisplayValue(value.toString());
}
if(maxSize.height<size.height)
maxSize.height=size.height;
return this;
}
}
确保你设计的东西比这个更高效......
更新:
而且不需要 pack()!
亚当。
【问题讨论】:
-
在 Swing 中,组件的大小取决于其容器的布局。你用什么布局?
-
不是一个好的解决方案。永远不要在渲染器中设置/更改 Swing 组件的属性。
-
为什么这不是一个好的解决方案?因为每次框架获得焦点时它都会遍历代码,并且循环会针对列表中的每个项目执行,这是您的意思吗?
标签: java swing autoresize