使用 Cell 渲染器时获取 Click JTable 的位置

Get position of Click JTable while using Cell renderer

我目前在Java中使用JTable来显示大量文本信息,因此实现了文本换行,使用以下代码:

MyCellRenderer mcr = new MyCellRenderer();
table.getColumnModel().getColumn(0).setCellRenderer(mcr);

class MyCellRenderer extends JTextArea implements TableCellRenderer {
  public MyCellRenderer() {
setLineWrap(true);
setWrapStyleWord(true);

 }

public Component getTableCellRendererComponent(JTable table, Object
    value, boolean isSelected, boolean hasFocus, int row, int column) {
setText(value.toString());
setSize(table.getColumnModel().getColumn(column).getWidth(),
        getPreferredSize().height);
if (table.getRowHeight(row) != getPreferredSize().height) {
        table.setRowHeight(row, getPreferredSize().height);
}
return this;
}
} 

然而,当这个实现时,任何检测被点击的单元格的尝试,简单地returns“-1”(越界)作为点击点,我使用下面的代码来检测点击位置:

table.addMouseListener(new java.awt.event.MouseAdapter() {

  public void mouseClicked(java.awt.event.MouseEvent e) {
    int row = table.rowAtPoint( e.getPoint() );
    int column = table.columnAtPoint( e.getPoint() );
  }
});
}

有什么方法可以在保持文本换行的同时向 JTable 中单击的单元格发送文本?

以下代码提供了上述功能,(它忽略了所有包装单元格渲染器) table.addMouseListener(新java.awt.event.MouseAdapter() {

  public void mouseClicked(java.awt.event.MouseEvent e) {
    JTable target = (JTable)e.getSource();
    int row = target.getSelectedRow();
    int column = target.getSelectedColumn();
    if((row >=0) && (column >=0)){
      //Stuff
    }

  }
});

My current situation requires a large amount of text information to be displayed next to [the] relevant data

代替 MouseListener,添加 TableModelListener to your TableModel and update the Document model of an adjacent JTextComponent. In this related exampleTableModelListener 更新相邻 JListListModel

或者,使用 SINGLE_SELECTION 添加 ListSelectionListener to your table's ListSelectionModel and update an adjacent component accordingly. In this related exampleListSelectionListener 更新相邻的 JButton

或者,看看这个 TablePopupEditor,它使用 JButton 作为 TableCellEditor。按钮的 ActionListener 唤起包含 JTextArea.

的弹出模式 JDialog