gpt4 book ai didi

java - 关于 swing 中的 jtable 单元格编辑器的问题

转载 作者:行者123 更新时间:2023-11-30 07:32:26 25 4
gpt4 key购买 nike

我想实现一个作为选项列表的组件,用户可以选择是否选择。
在视觉上我认为它最好在 UI 中呈现(如果有更好的方法请告诉我)如下:
enter image description here

无论如何,我认为这可以通过 JTable(单列)并使用 JCheckBox 作为单元格编辑器来实现。
我试过了,但没有用。
代码示例:

public class ListRenderer extends JFrame {

JCheckBox checkbox = new JCheckBox("Test");
DefaultCellEditor dce1 = new DefaultCellEditor(checkbox);

public ListRenderer(){

Object[][] data = { {"Test"} };
String[] columnNames = {"Options"};

DefaultTableModel model = new DefaultTableModel(data,columnNames);

JTable table = new JTable(model){

public TableCellEditor getCellEditor(int row, int column)
{
return dce1;
}

};
JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
}

发生的情况是,当框架出现时,我在表格中看到了“测试”,但它看起来不像一个复选框(如示例图像中所示)。
如果我单击该单元格,它会变成一个复选框(单击左侧而非右侧的按钮)但文本会更改为显示 truefalse!它不会一直显示“测试”
更多的文字取决于我是否继续按下单元格。
如果我将 JCheckBox 更改为 JComboBox,据我所知,行为是正确的。
谁能告诉我我在这里做错了什么?
谢谢!

最佳答案

default 呈现为 JCheckBox ,表的模型必须返回 Boolean.class 作为该列的类型。如果您使用 DefaultTableModel ,您将必须相应地覆盖 getColumnClass()。这是一个相关的 example .

附录:example 中的注释ValueRenderer 的编辑器私有(private)实例可以直接应用 ItemEvent,而不是通过 setValueAt() .

附录:example已更新以反射(reflect)正确的模型 View 工作流程。

setValueAt() is called anyway. Verified it via debugging

如果你进入setValueAt() ,您会看到“提供了此空实现,因此如果用户的数据模型不可编辑,则用户不必实现此方法。”

关于java - 关于 swing 中的 jtable 单元格编辑器的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6633437/

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