我有两个组件JTextField和JComboBox的相同问题,我假设我正在寻找的解决方案将为所有组件解决它。
我已将组件的大小设置为默认值,因此它们的大小适合我提供给它的初始内容。当我更改组件的内容超出组件的区域时,我看不到整个文本,我希望我的组件调整大小以适应文本。
我该如何实现?
更新
框架上的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;
}
}
这个工作,效率不是很高,但这是第一步,事实是,它不会将按钮图像考虑到大小,所以有些文本仍未显示,但组件调整大小,你有没有建议?
亚当。
答案:
这与包()一起完成了这个技巧,不需要重新验证。
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;
}
}
确保你设计出比这更有效的东西...
更新
并且不需要包()!
亚当。
答案 0 :(得分:1)
在框架上做一个包()
答案 1 :(得分:1)
JComboBox
具有setPrototypeDisplayValue(Object)
方法,该方法用于根据参数的长度计算组件的首选宽度。试试吧。
而不是pack()
将doLayout()
与revalidate()
或repaint()
答案 2 :(得分:0)
要调整组合框的大小,您可以尝试:
comboBox.setModel( comboBox.getModel() );
我认为这会导致重新计算组合框的首选大小。当然,您需要再次执行pack()。
编辑:
添加了一个显示此功能的简单SSCCE:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ComboBoxTest3 extends JFrame implements ActionListener
{
JComboBox comboBox;
JTextField textField;
public ComboBoxTest3()
{
String[] tabs = {"one", "two", "three", "four", "five", "six", "seven" };
DefaultComboBoxModel model = new DefaultComboBoxModel(tabs);
comboBox = new JComboBox( model );
textField = new JTextField("hello");
add(comboBox, BorderLayout.WEST );
add(textField, BorderLayout.EAST );
JButton button = new JButton("Pack");
button.addActionListener( this );
add(button, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e)
{
textField.setText("hello there!");
comboBox.addItem("some longer text");
comboBox.setModel( comboBox.getModel() );
pack();
}
public static void main(String[] args)
{
JFrame frame = new ComboBoxTest3();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
}