Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swing 按钮采集器不';t选择Jtable的行_Swing_Jtable_Selection_Jbutton - Fatal编程技术网

Swing 按钮采集器不';t选择Jtable的行

Swing 按钮采集器不';t选择Jtable的行,swing,jtable,selection,jbutton,Swing,Jtable,Selection,Jbutton,我有一个自定义单元渲染器和JButton编辑器。我的问题是,如果我单击一个按钮,相应的行不会被选中 之所以需要它,是因为按钮的ActionListener需要获取所单击行的信息 我如何实现这种行为 编辑: 我有一个类,它包含一个JTable和一个DefaultListModel组合。此表显示每行的一个对象。此外,每行包含一个修改和删除按钮,该按钮由下面的按钮列实现。行本身不包含实际数据-它只包含普通字符串。如果现在单击“修改”或“删除”按钮,我想对真实对象(存储在interalArrayList

我有一个自定义单元渲染器和JButton编辑器。我的问题是,如果我单击一个按钮,相应的行不会被选中

之所以需要它,是因为按钮的ActionListener需要获取所单击行的信息

我如何实现这种行为

编辑:

我有一个类,它包含一个
JTable
和一个
DefaultListModel
组合。此表显示每行的一个对象。此外,每行包含一个修改和删除按钮,该按钮由下面的
按钮列
实现。行本身不包含实际数据-它只包含普通字符串。如果现在单击“修改”或“删除”按钮,我想对真实对象(存储在interal
ArrayList
中)执行某些操作,因此我需要单击按钮所在行的信息

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(…行…)中将所选行添加到该行中以传递到编辑器中