使用 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 example,TableModelListener
更新相邻 JList
的 ListModel
。
或者,使用 SINGLE_SELECTION
添加 ListSelectionListener
to your table's ListSelectionModel
and update an adjacent component accordingly. In this related example,ListSelectionListener
更新相邻的 JButton
。
或者,看看这个 TablePopupEditor
,它使用 JButton
作为 TableCellEditor
。按钮的 ActionListener
唤起包含 JTextArea
.
的弹出模式 JDialog
我目前在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 example,TableModelListener
更新相邻 JList
的 ListModel
。
或者,使用 SINGLE_SELECTION
添加 ListSelectionListener
to your table's ListSelectionModel
and update an adjacent component accordingly. In this related example,ListSelectionListener
更新相邻的 JButton
。
或者,看看这个 TablePopupEditor
,它使用 JButton
作为 TableCellEditor
。按钮的 ActionListener
唤起包含 JTextArea
.
JDialog