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

时间:2015-05-23 17:52:39

标签: java swing jtable mouselistener

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

closest_point = X(IDX,:);

然而,当实现这一点时,任何检测单击的单元格的尝试,只返回“-1”(越界)作为点击,我使用以下代码来检测点击位置:< / p>

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;
}
} 

在保持文本换行的同时,有没有办法可以对JTable中单击的单元格进行文本化处理?

2 个答案:

答案 0 :(得分:3)

  

我目前的情况需要在[相关数据

旁边显示大量文字信息

而不是MouseListener,向TableModel添加TableModelListener并更新相邻JTextComponentDocument模型。在此相关example中,TableModelListener更新了相邻ListModel的{​​{1}}。

或者,在表JList中添加ListSelectionListener并相应地更新相邻组件。在使用ListSelectionModel的相关example中,SINGLE_SELECTION更新了相邻的ListSelectionListener

或者,请查看此TablePopupEditor,其中使用JButton作为JButton。按钮的TableCellEditor会唤起包含ActionListener的弹出模式JDialog

答案 1 :(得分:0)

以下代码给出了上述功能,(它忽略了所有包装单元格渲染器)         table.addMouseListener(new 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
    }

  }
});