for (FaultData fd : fdatas) {
Object[] arr = new Object[columnCount];
arr[0] = (++count) + "";
arr[1] = fd.getLine();
arr[2] = fd.getDeviceName();
arr[3] = fd.getFaultTime() + " " + UIUtil.getNumStr2(fd.getUs(), fd.getTimeType()) + fd.getTimeType().replace("us", "µs");
if (fd.getTimeType().equals(""))
arr[3] = arr[3] + "µs";
arr[4] = fd.getLocStr();
arr[5] = fd.getAmplitudeInfo();
arr[6] = fd.getFaPhase();
arr[7] = fd.getNatureInfo();
arr[9] = fd.getRemark();
arr[10] = fd.getId();
arr[11] = "操作1";
arr[12] = "操作2";
arr[13] = "操作3";
arr[14] = "操作4";
content.add(arr);
}
table.getColumnModel().getColumn(11).setPreferredWidth(120);
table.getColumnModel().getColumn(11).setCellRenderer(new ButtonRenderer());
table.getColumnModel().getColumn(11).setCellEditor(new ButtonEditor(new JCheckBox("1")));
table.getColumnModel().getColumn(12).setPreferredWidth(120);
table.getColumnModel().getColumn(12).setCellRenderer(new ButtonRenderer());
table.getColumnModel().getColumn(12).setCellEditor(new ButtonEditor(new JCheckBox("2")));
table.getColumnModel().getColumn(13).setPreferredWidth(120);
table.getColumnModel().getColumn(13).setCellRenderer(new ButtonRenderer());
table.getColumnModel().getColumn(13).setCellEditor(new ButtonEditor(new JCheckBox("3")));
table.getColumnModel().getColumn(14).setPreferredWidth(120);
table.getColumnModel().getColumn(14).setCellRenderer(new ButtonRenderer());
table.getColumnModel().getColumn(14).setCellEditor(new ButtonEditor(new JCheckBox("4")));
// 按钮渲染器
static class ButtonRenderer extends JButton implements TableCellRenderer {
public ButtonRenderer() {
setOpaque(true);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setText((value == null) ? "" : value.toString());
return this;
}
}
// 按钮编辑器
static class ButtonEditor extends DefaultCellEditor {
private JButton button;
public ButtonEditor(JCheckBox checkBox) {
super(checkBox);
button = new JButton();
button.setOpaque(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fireEditingStopped();
switch (checkBox.getText()) {
case "1":
// 默认操作,可以在这里处理"操作1"的情况
System.out.println("操作1 clicked in row " + table.getEditingRow());
break;
case "2":
// 执行操作2的操作
System.out.println("操作2 clicked in row " + table.getEditingRow());
break;
case "3":
// 执行操作3的操作
System.out.println("操作3 clicked in row " + table.getEditingRow());
break;
case "4":
// 执行操作4的操作
System.out.println("操作4 clicked in row " + table.getEditingRow());
break;
}
}
});
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
button.setText((value == null) ? "" : value.toString());
return button;
}
@Override
public Object getCellEditorValue() {
return button.getText();
}
}
我想在这个table中每一行添加4个操作按钮,但我按这种方式添加后没有用,点击按钮没有进入actionPerformed中。这是怎么回事?是和其他的listenter冲突了吗?