我在 JTable
中有一个单元格,其中有 JPanel
。 JPanel
里面有 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/