gpt4 book ai didi

java - 选择了空值但不在 ComboBoxModel 中的 JComboBox 首选大小

转载 作者:搜寻专家 更新时间:2023-11-01 03:26:56 25 4
gpt4 key购买 nike

我有以下情况:在 JCombobox 中,首选大小基于最大的项目大小。但是,此计算未考虑为 null 呈现的值。它只关心模型内部的值。因此,当用于呈现空值的文本大于其他元素时,标签将被截断,并且我在末尾有三个点 (...)。我想避免这种情况。

这是我正在谈论的一个小演示:

Truncated null value rendered

import java.awt.Component;
import java.awt.GridBagLayout;

import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestComboBox {

protected void initUI() {
JFrame frame = new JFrame(TestComboBox.class.getSimpleName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridBagLayout());
JComboBox comboBox = new JComboBox(new Object[] { "Something", "Stuff", "Beep" });
comboBox.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Component comp = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (value == null) {
setText("No selection");
}
return comp;
}
});
comboBox.setSelectedItem(null);
panel.add(comboBox);
frame.add(panel);
frame.setSize(200, 100);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
new TestComboBox().initUI();
}
});
}
}

我想知道您是否有任何建议。到目前为止,我的想法是扩展 JComboBox,覆盖首选大小,还执行 null 值的渲染,并采用对 super.preferredSize 调用的最大维度和 null 值渲染之一。但我觉得这有点令人失望。

我真的不想使用 prototypeDisplayValue 绝对不是一个选项,因为我不知道该下拉列表中的值

最佳答案

我没有在代码中对此进行测试,但我的方法是:

  1. 确定preferredSize之间的区别的 Component由渲染器返回,实际 preferredSizeJComboBox .不是通过使用任何硬编码值,而是通过创建 JComboBox仅包含一个项目和一个已知渲染器的幕后花絮,并比较了 JComboBox 的首选大小大小为 Component由已知渲染器返回。
  2. 每次通过将监听器附加到 UIManager 更改外观时,重复步骤 1
  3. 覆盖 getPreferredSize实际的JComboBox并返回 super.getPreferredSize() 宽度的最大值和 getPreferredSize( rendererComponent ) + calculatedDifference

这应该会处理外观问题,避免不必要的计算,您可以轻松创建 JComboBox包含此功能的扩展。

关于java - 选择了空值但不在 ComboBoxModel 中的 JComboBox 首选大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11582478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com