java - JComponent contains 方法在 JTable 的 MouseEvent 操作中不起作用

标签 java swing jtable mouseevent

我在 JTable 中有一个单元格,其中有 JPanelJPanel 里面有 2 个标签。我想在单击左侧标签时执行不同的操作,并且在单击右侧操作时执行另一个操作。我不想使用 TableCellEditor,它使我的代码变得如此复杂。因为我的单元格值有一个类型范围。

我编写了以下代码来从鼠标事件中获取选定的组件,但没有成功。我也尝试了 SwingUtilies.convertMouseEvent,但它没有改变任何东西。下面的代码有什么问题?为什么JComponent contains方法不检查鼠标点。

contSimTable.addMouseListener(new MouseAdapter() {
    public void mouseClicked(final MouseEvent event) {
        if (SwingUtilities.isLeftMouseButton(event)) {
            if (event.getClickCount() == 2) {
                JTable target = (JTable) event.getSource();
                int row = contSimTable.getSelectedRow();
                int column = contSimTable.getSelectedColumn();
                /**
                 * convert from view colum to model.It is column index
                 * which is stored in table model
                 */
                int modelColumn = target.convertColumnIndexToModel(column);

                Object clickedCell = contSimTable.getValueAt(row, modelColumn);
                if (clickedCell instanceof JPanel) {
                    boolean isSecond = false;
                    JLabel a = (JLabel) ((JPanel) clickedCell)
                        .getComponent(0);

                    JLabel b = (JLabel) ((JPanel) clickedCell)
                        .getComponent(1);
                    if (a.contains(event.getPoint())) {
                        isSecond = false;
                    }
                    //                                                      
                    if (b.contains(event.getPoint())) {
                        isSecond = true;
                    }

                }

            }
        }
    }
});

最佳答案

一个TableCellEditor是正确的做法。有多种方法可以处理不同的数据类型:

  • 默认情况下,如讨论的 here .

  • 通过TableColumn,如图here .

  • 通过从 getColumnClass() 返回的类型 token ,如图 here .

  • 通过重写getCellEditor(),如图here .

如需更具体的指导,请编辑您的问题以包含 sscce这代表了您选择的方法。

关于java - JComponent contains 方法在 JTable 的 MouseEvent 操作中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18447054/

相关文章:

java - 为什么在 Activity 之间访问变量时不首选 getter?

java - 有没有办法删除 Install4j 中内置的窗口标题栏?

java - 在 NetBeans 中从 AbstractTableModel 创建 JTable

python - JTables 和 Jython 事件

java - TestNG 方法中的可变长度参数

java - Wicket:有状态页面中的无状态 AJAX 行为,无需序列化

java - 文本区域中的滚动 Pane

java - Swing:JPanel "setSize"被忽略?

java - DefaultListSelectionModel 很慢,如何更快地添加选择?

java.lang.StringIndexOutOfBoundsException : String index out of range: -1 (Works with another program)