gpt4 book ai didi

swing - JTable 中的 JSlider

转载 作者:行者123 更新时间:2023-12-02 12:53:28 26 4
gpt4 key购买 nike

为了将 JSlider 放入 JTable 中,我编写了 AbstractCellEditor ,它实现了 TableCellRenderer >表格单元格编辑器。它使用 0 到 100 之间的值进行初始化。

我有一个奇怪的行为,当我第一次单击 slider 时,它会跳到最大值。

第二个奇怪的行为:我添加了一个 ChangeListener。仅当我第一次单击 slider 时才会调用此监听器。第二次单击(也会更改值)不会导致此事件。为什么?

public class SliderTableColumn extends AbstractCellEditor implements TableCellRenderer,
TableCellEditor

{
private final JSlider slRenderer;
private final JSlider slEditor;

private final int INITAL_VALUE;
private final int MIN_VLAUE;
private final int MAX_VALUE;

public SliderTableColumn(int min, int max, int initial, ChangeListener listener)
{
INITAL_VALUE = initial;
MIN_VLAUE = min;
MAX_VALUE = max;

slRenderer = new JSlider(MIN_VLAUE, MAX_VALUE);
slEditor = new JSlider(MIN_VLAUE, MAX_VALUE);

slEditor.addChangeListener(listener);

slRenderer.setUI(new CustomSliderUI(slRenderer, INITAL_VALUE));
slEditor.setUI(new CustomSliderUI(slEditor, INITAL_VALUE));

slRenderer.setValue(INITAL_VALUE);
slEditor.setValue(INITAL_VALUE);
}

@Override
public Object getCellEditorValue()
{
return slEditor.getValue();
}

@Override
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column)
{
if(value != null)
{
slRenderer.setValue(((Integer) value).intValue());
}
return slRenderer;
}

@Override
public Component getTableCellEditorComponent(JTable table,
Object value,
boolean isSelected,
int row,
int column)
{
if(value != null)
{
slEditor.setValue(((Integer) value).intValue());
}
return slEditor;
}
}

最佳答案

缺少您的sscce ,我在猜测;但我可以建议仔细检查两件事:

  1. getTableCellEditorComponent() 中,实际参数 value 来自您的表模型。您的 setValue() 调用将 value 转发到 slider 的范围模型。超出范围的被固定到 extreme .

  2. 您的 ChangeListener 需要 fireEditingStopped(),如相关 exampleItemListener 所示。 .

关于swing - JTable 中的 JSlider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8854841/

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