有没有一种方法可以在没有CellEditor的情况下选择JTable中单元格中的所有文本?

法夸德勋爵

简化版:给定具有扩展了DefaultTableModel的TableModel的JTable,是否可以在不使用CellEditor的情况下选择具有String类的单元格中的所有文本?

详细版本:我制作了一个TableModel,它扩展了DefaultTableModel,并且只应具有可编辑的可选行。这是相关的部分:

class MyTableModel extends DefaultTableModel {

    private List<String> columnNames;
    private List<List<String>> strings;

    /** editable stores the columns which we're allowed to change */
    private List<Integer> editable;

    public MyTableModel (List<String> columnNames, List<List<String>> 
            strings, List<Integer> editable) {
        this.columnNames = columnNames;
        this.strings = strings;
        this.editable = editable;
    }

    public Object getValueAt(int row, int col) {
        return strings.get(col).get(row);
        return null;
    }

    public void setValueAt(Object value, int row, int col) {
        strings.get(col).set(row, (String) value);
        fireTableCellUpdated(row, col);
    }

    public boolean isCellEditable(int row, int col) {
        return canEdit(col);
    }

    /**
     * This method looks like it should be lumped into isCellEditable()
     * But there's unique behavior I plan on having later for the first
     * column and this will let my code down the road be much cleaner.
     **/ 
    public boolean canEdit(int col) {
        return col != 0 && editable.indexOf(col) != -1;
    }
}

据了解,DefaultTableModel将用字符串填充的单元格视为JTextFields。我们使用此表的地方是用两列填充它。带有文件名的不可编辑的列(如字符串),其后是可编辑的字符串的空列。选择一个可编辑的单元格后,我希望它设置其文本为文件名之前的文件名,然后选择所有文本(此后,用户执行的命令中每个文件都有可选的String字段,因此,如果文件名是关联的可编辑单元格不为空,它使用该值。我们不希望用户每次设置此文件名时都必须重新输入整个文件名,但也希望使他们能够在需要时快速输入该文件名。

该表具有一个MouseListener,它可以查看是否单击了可编辑单元格,如果可以单击,还可以在单​​元格前填充文件名。

table.addMouseListener(new MouseAdapter() {
    public void mouseReleased(MouseEvent e) {       
        JTable table = ((JTable) e.getSource());
        MyTableModel model = (MyTableModel)table.getModel();
        int row = table.rowAtPoint(e.getPoint());
        int col = table.columnAtPoint(e.getPoint());

        if(tableModel.canEdit(col))
            tableModel.setValueAt(
                tableModel.getValueAt(row, col - 1), row, col);
    }
});

这工作正常,但我无法选择文本。我似乎找不到返回单元格组件的方法,并且添加了在网上找到的CellEditor,但是它没有任何改变。

class MyCellEditor extends DefaultCellEditor {

    public MyCellEditor(JTextField textField) {
        super(textField);

        textField.addFocusListener(new FocusAdapter()  {
            public void focusGained(FocusEvent e ) {
                textField.selectAll();
            }
        });
    }
}

与此添加到表中:

for(int i = 0; i < table.getRowCount(); i++)
    table.setCellEditor(new MyCellEditor(new
              JTextField((String)table.getValueAt(i, 2))));

如果有一种方法可以完全省略CellEditor,那么事情会容易得多,但是如果我做过一些事情,例如弄乱了这些侦听器处理事件的顺序,我不介意包括其中。我要避免的是需要编写一些巨大的CellEditor或对所有代码进行大修,以增加一点点便利。

卡米克尔

尝试将selectAll()语句包装在SwingUtilities.invokeLater(...)

请参阅:如何模拟DefaultCellEditor的“ onStartCellEditing”

有关在开始单元格编辑时在任何单元格中选择文本的一般示例:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以在不刷新单元格的情况下显示单元格中的对象?

来自分类Dev

在Microsoft Excel中,有没有一种方法可以在不使用Visual Basic的情况下根据单元格内容动态更改列宽?

来自分类Dev

有没有一种方法可以在Excel中检索注释的单元格地址?

来自分类Dev

有没有一种方法可以在Excel的单元格中搜索所有匹配字符串的起始字符位置?

来自分类Dev

有没有一种方法可以根据Excel中的加权概率随机选择一个单元格?

来自分类Dev

有没有一种方法可以使用换行分隔符将文本从单元格拆分为多个记录,在SQL中?

来自分类Dev

有没有一种方法可以在没有停机的情况下更新net / http服务器中的TLS证书?

来自分类Dev

有没有一种方法可以在没有foreach循环的情况下对小于给定点的数组中的整数进行计数?

来自分类Dev

有没有一种方法可以在没有特定顺序的情况下测试集合中的元素?

来自分类Dev

有没有一种方法可以在没有全盘加密的情况下加密我的文件

来自分类Dev

有没有一种方法可以在没有全盘加密的情况下加密我的文件

来自分类Dev

有没有一种方法可以在没有JavaScript的情况下动态更改内容?

来自分类Dev

有没有一种方法可以消除此单元格中带有图像的这些多余的行?

来自分类Dev

有没有一种方法可以在不使用现有表的情况下在选择中返回多于1行

来自分类Dev

有没有一种方法可以根据Excel 2016中的条件对一组单元格进行排名?

来自分类Dev

有没有一种方法可以通过其中一个单元格中的按钮刷新整个UITableView?

来自分类Dev

有没有一种方法可以基于列标题和行在矩阵中创建非空白单元格的计数?

来自分类Dev

有没有一种方法可以将单元格中用逗号分隔的值列表包装在引号中?

来自分类Dev

有没有一种方法可以表示条件,假设自定义数字格式的单元格中该项目的绝对值?

来自分类Dev

有没有一种方法可以将链接粘贴到外部单元格中,以用于从中导入数据?

来自分类Dev

c#:有没有一种方法可以从数据开始处检索excel中的单元格地址?

来自分类Dev

有没有一种方法可以基于列标题和行在矩阵中创建非空白单元格的计数?

来自分类Dev

有没有一种方法可以向Word表中的单元格添加页眉和页脚?

来自分类Dev

有没有一种方法可以拆分具有部分删除线文本的单元格内容?

来自分类Dev

有没有一种方法可以将图像叠加在多个单元格上?

来自分类Dev

有没有一种方法可以设置用户未与之交互的单元格的值

来自分类Dev

有没有一种方法可以从一个表中全部选择,并在可能的情况下联接?

来自分类Dev

有没有一种方法可以重用Perlpod文档中的文本?

来自分类Dev

有没有一种方法可以在Python中为文本着色?

Related 相关文章

  1. 1

    有没有一种方法可以在不刷新单元格的情况下显示单元格中的对象?

  2. 2

    在Microsoft Excel中,有没有一种方法可以在不使用Visual Basic的情况下根据单元格内容动态更改列宽?

  3. 3

    有没有一种方法可以在Excel中检索注释的单元格地址?

  4. 4

    有没有一种方法可以在Excel的单元格中搜索所有匹配字符串的起始字符位置?

  5. 5

    有没有一种方法可以根据Excel中的加权概率随机选择一个单元格?

  6. 6

    有没有一种方法可以使用换行分隔符将文本从单元格拆分为多个记录,在SQL中?

  7. 7

    有没有一种方法可以在没有停机的情况下更新net / http服务器中的TLS证书?

  8. 8

    有没有一种方法可以在没有foreach循环的情况下对小于给定点的数组中的整数进行计数?

  9. 9

    有没有一种方法可以在没有特定顺序的情况下测试集合中的元素?

  10. 10

    有没有一种方法可以在没有全盘加密的情况下加密我的文件

  11. 11

    有没有一种方法可以在没有全盘加密的情况下加密我的文件

  12. 12

    有没有一种方法可以在没有JavaScript的情况下动态更改内容?

  13. 13

    有没有一种方法可以消除此单元格中带有图像的这些多余的行?

  14. 14

    有没有一种方法可以在不使用现有表的情况下在选择中返回多于1行

  15. 15

    有没有一种方法可以根据Excel 2016中的条件对一组单元格进行排名?

  16. 16

    有没有一种方法可以通过其中一个单元格中的按钮刷新整个UITableView?

  17. 17

    有没有一种方法可以基于列标题和行在矩阵中创建非空白单元格的计数?

  18. 18

    有没有一种方法可以将单元格中用逗号分隔的值列表包装在引号中?

  19. 19

    有没有一种方法可以表示条件,假设自定义数字格式的单元格中该项目的绝对值?

  20. 20

    有没有一种方法可以将链接粘贴到外部单元格中,以用于从中导入数据?

  21. 21

    c#:有没有一种方法可以从数据开始处检索excel中的单元格地址?

  22. 22

    有没有一种方法可以基于列标题和行在矩阵中创建非空白单元格的计数?

  23. 23

    有没有一种方法可以向Word表中的单元格添加页眉和页脚?

  24. 24

    有没有一种方法可以拆分具有部分删除线文本的单元格内容?

  25. 25

    有没有一种方法可以将图像叠加在多个单元格上?

  26. 26

    有没有一种方法可以设置用户未与之交互的单元格的值

  27. 27

    有没有一种方法可以从一个表中全部选择,并在可能的情况下联接?

  28. 28

    有没有一种方法可以重用Perlpod文档中的文本?

  29. 29

    有没有一种方法可以在Python中为文本着色?

热门标签

归档