Poniżej masz przykład jak stworzyć własnego CellRenderera, za pomocą którego można wyświetlać w komórkach dowolne rzeczy oraz przykład własnego modelu danych dal tabeli:
Dummy.java
public class Dummy {
private int i;
private String s;
public Dummy(String s, int i) {
this.s = s;
this.i = i;
}
public void setS(String s) {
this.s = s;
}
public String getS() {
return s;
}
public void setI(int i) {
this.i = i;
}
public int getI() {
return i;
}
}
MyTableModel.java
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class MyTableModel extends AbstractTableModel {
List<Dummy> list;
public MyTableModel() {
list = new ArrayList<Dummy>();
// zainicjowanie jakimis danymi
list.add(new Dummy("A", 1));
list.add(new Dummy("B", 2));
list.add(new Dummy("C", 3));
list.add(new Dummy("D", 4));
}
@Override
public int getColumnCount() {
return 3; //beda 3 kolumy: 2 na pola z Dummy oraz na przycisk
}
@Override
public int getRowCount() {
return list.size();
}
@Override
public Object getValueAt(int x, int y) {
switch (y) {
case 0:
return list.get(x).getS();
case 1:
return list.get(x).getI();
default:
return null;
}
}
}
MyCellRenderer.java
import java.awt.Color;
import java.awt.Component;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class MyCellRenderer extends DefaultTableCellRenderer {
JButton button = new JButton("Press");
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (hasFocus) {
setBorder(BorderFactory.createLineBorder(Color.YELLOW, 1));
} else {
setBorder(null);
}
switch (column) {
case 0:
case 1:
setBackground(Color.LIGHT_GRAY);
setText(value.toString());
break;
case 2:
return button;
}
return this;
}
}
MainClass.java
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;
public class MainClass extends JFrame {
public static void main(String[] args) {
JFrame thisClass = new MainClass();
TableCellRenderer cellRenderer = new MyCellRenderer();
TableModel model = new MyTableModel();
JTable table = new JTable(model);
//ustawianie rendererow kolumn
for (int i = 0; i < table.getColumnCount(); i++) {
table.getColumnModel().getColumn(i).setCellRenderer(cellRenderer);
}
thisClass.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
thisClass.add(table);
thisClass.setSize(250, 120);
thisClass.setVisible(true);
}
}
Jednak nie będziesz miał możliwości klikania w przyciski - będą tylko wyświetlone. Aby zasymulować ich naciśnięcie trzeba pokombinować bodajże z TableCellEditor i MouseListenerem.