Swing 按钮采集器不';t选择Jtable的行
我有一个自定义单元渲染器和JButton编辑器。我的问题是,如果我单击一个按钮,相应的行不会被选中 之所以需要它,是因为按钮的ActionListener需要获取所单击行的信息 我如何实现这种行为 编辑: 我有一个类,它包含一个Swing 按钮采集器不';t选择Jtable的行,swing,jtable,selection,jbutton,Swing,Jtable,Selection,Jbutton,我有一个自定义单元渲染器和JButton编辑器。我的问题是,如果我单击一个按钮,相应的行不会被选中 之所以需要它,是因为按钮的ActionListener需要获取所单击行的信息 我如何实现这种行为 编辑: 我有一个类,它包含一个JTable和一个DefaultListModel组合。此表显示每行的一个对象。此外,每行包含一个修改和删除按钮,该按钮由下面的按钮列实现。行本身不包含实际数据-它只包含普通字符串。如果现在单击“修改”或“删除”按钮,我想对真实对象(存储在interalArrayList
JTable
和一个DefaultListModel
组合。此表显示每行的一个对象。此外,每行包含一个修改和删除按钮,该按钮由下面的按钮列
实现。行本身不包含实际数据-它只包含普通字符串。如果现在单击“修改”或“删除”按钮,我想对真实对象(存储在interalArrayList
中)执行某些操作,因此我需要单击按钮所在行的信息
class ButtonColumn extends AbstractCellEditor implements TableCellRenderer,
TableCellEditor
{
private JButton btRenderer = new JButton();
private JButton btEdit = new JButton();
private String text;
public ButtonColumn(ActionListener listener, String actionCommand)
{
btEdit.setFocusPainted(false);
btEdit.addActionListener(listener);
btEdit.setActionCommand(actionCommand);
}
public void addMouseListener(MouseListener listener)
{
btEdit.addMouseListener(listener);
}
@Override
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column)
{
btRenderer.setText((value == null) ? "" : value.toString());
return btRenderer;
}
@Override
public Component getTableCellEditorComponent(JTable table,
Object value,
boolean isSelected,
int row,
int column)
{
text = (value == null) ? "" : value.toString();
btEdit.setText(text);
return btEdit;
}
@Override
public Object getCellEditorValue()
{
return text;
}
}
我通过向ButtomCellRenderer/编辑器(在table类中实现)添加另一个自定义的
MouseListener
来修复它
@Override
public void mousePressed(MouseEvent e)
{
clickedRowIndex = table.rowAtPoint(e.getPoint());
}
在那里,如果我单击
按钮,我可以获得单击哪个单元格的信息。ll
可以在actionPerformed
方法中使用此信息。这似乎相当迂回。这显示了标准方法。你能详细说明一下吗?这个“修复”很可能只是隐藏了代码中更深层次的问题。最好现在就去挖掘真正的问题,而不是以后再去受苦:-)我已经编辑了这个问题-我的问题是我没有在JTable中存储实际的对象,只是简单的数据。是的,在ButtonColumn中我有一行。但不是在外面。我需要按钮的actionPerformed()行。谢谢你的提示。我的一般行为是,如果单击一个按钮,我想编辑/删除一个对象。在包含JTable的类中,我为ButtonColumns实现了ActionListener,ButtonColumns是在构造函数中设置的。此ActionListener现在需要有关按下哪个按钮的信息。a)听起来好像代码中有错误,您没有显示b)听起来可疑,您需要在getTableCellEditorComponent(…行…)中将所选行添加到该行中以传递到编辑器中