gpt4 book ai didi

java - TableCellEditor 类不起作用

转载 作者:行者123 更新时间:2023-12-02 04:46:08 24 4
gpt4 key购买 nike

我试图在每一行的末尾添加按钮,到目前为止我已经使用 cellRenderer 来做到这一点。并且我已经成功地在每一行中显示按钮,就像在快照中一样。 Table populated with buttons in each row但是当我单击按钮时,没有任何操作发生。我想在单击按钮时调用一个新框架。以下是我的源代码:

1.用于填充 Jtable

try
{
String url="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=c:\\ninedots.accdb";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection(url);
String sql1="SELECT RMA_No,CallDate,Source,Item,BookingDesc,Customer,Contact,CallType,CallMode,MaterialRequired,TotalMaterialRequiredCost,AssignedTo,CallStatus FROM RMA_Master WHERE (((CallDate) Between #"+fromdate1+"# And #"+todate1+"#)) AND CallStatus='"+Status+"'";
PreparedStatement pst=con.prepareStatement(sql1);
ResultSet rs=pst.executeQuery();
dtm=(DefaultTableModel) DbUtils.resultSetToTableModel(rs);
dtm.addColumn("Action");
table.setModel(dtm);
table.getColumn("Action").setCellRenderer(new ButtonCellRenderer());
table.getColumn("Action").setCellEditor(new ButtonCellEditor());
rs.close();
pst.close();
con.close();
}
catch(Exception ex)
{
System.err.print("Exception: ");
System.err.println(ex.getMessage());
}

2.ButtonCellRenderer类

 public class ButtonCellRenderer extends JButton implements TableCellRenderer {

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value != null) {
setText("Edit" + value.toString());
} else {
setText("Edit");
}
if (isSelected) {
setForeground(table.getSelectionForeground());
setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(UIManager.getColor("Button.background"));
}
return this;
}
}

3.ButtonCellEditor类

 public class ButtonCellEditor extends AbstractCellEditor implements TableCellEditor {

/**
*
*/
private static final long serialVersionUID = 1L;
private JButton editor;
private Object value;
private int row;
private JTable table;

public ButtonCellEditor() {
editor = new JButton();
editor.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (table != null) {
fireEditingStopped();
TableModel model = table.getModel();
if (model instanceof DefaultTableModel) {
((DefaultTableModel) model).removeRow(row);
}
}
}
});
}

@Override
public boolean isCellEditable(EventObject e) {
return true;
}

@Override
public Object getCellEditorValue() {
return value;
}

@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
this.table = table;
this.row = row;
this.value = value;
if (value != null) {
editor.setText("Delete row " + value.toString());
} else {
editor.setText("Delete Me");
}
if (isSelected) {
editor.setForeground(table.getSelectionForeground());
editor.setBackground(table.getSelectionBackground());
} else {
editor.setForeground(table.getForeground());
editor.setBackground(UIManager.getColor("Button.background"));
}
return editor;
}


}

请针对以下问题提出解决方案。或者我在哪里做错了?

最佳答案

查看Table Button Column自定义渲染器/编辑器,允许您向任何列添加带有自定义操作的按钮。

您编写的唯一代码是Action,因此很容易实现:

Action delete = new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
JTable table = (JTable)e.getSource();
int modelRow = Integer.valueOf( e.getActionCommand() );
((DefaultTableModel)table.getModel()).removeRow(modelRow);
}
};

关于java - TableCellEditor 类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29647762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com