package tablebuttons;
/*
* TableButtonsDemo.java
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableButtonsDemo extends JFrame {
private JTable table;
public TableButtonsDemo() {
initComponents();
table.getColumnModel().getColumn(3).setCellRenderer(new CButtonRenderer());
table.getColumnModel().getColumn(3).setCellEditor(new CButtonEditor());
resizeTable(table, 70, 70, 70, 140);
}
private void resizeTable(final JTable aTable, final int... columnWidth) {
if(columnWidth.length > aTable.getColumnCount()) throw new IllegalArgumentException();
aTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
TableColumnModel tableColumnModel = aTable.getColumnModel();
TableColumn tableColumn;
for ( int i=0; i<columnWidth.length; i++ ) {
tableColumn = tableColumnModel.getColumn( i );
tableColumn.setPreferredWidth( columnWidth[i] );
}
}
private void initComponents() {
table = new JTable();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
table.setModel(new DefaultTableModel(
new Object [][] {
{"1", "1", "1", null},
{"2", "2", "2", null},
{"3", "3", "3", null},
{"4", "4", "4", null}
},
new String [] {"Title 1", "Title 2", "Title 3", "Aktion"}
));
getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
setSize(400,300);
setLocationRelativeTo(null);
}
public static void main(final String args[]) {new TableButtonsDemo().setVisible(true);}
}
class CButtonRenderer implements TableCellRenderer {
JButton r_btUp;
JButton r_btDown;
JButton r_btDel;
JPanel r_panControl;
public CButtonRenderer() {
super();
r_panControl = new JPanel();
r_panControl.setLayout(new GridLayout(1,3));
r_btUp = new JButton("^");
r_btDown = new JButton("v");
r_btDel = new JButton("X");
r_panControl.add(r_btUp);
r_panControl.add(r_btDown);
r_panControl.add(r_btDel);
}
public Component getTableCellRendererComponent(JTable arg0, Object arg1,
boolean arg2, boolean arg3, int arg4, int arg5) {
return r_panControl;
}
}
class CButtonEditor extends AbstractCellEditor implements TableCellEditor, ActionListener {
private JButton e_btUp, e_btDown, e_btDel;
private JPanel e_panControl;
private int e_row;
private JTable e_table;
public CButtonEditor() {
super();
e_panControl = new JPanel(new GridLayout(1,3));
e_btUp = new JButton("^");
e_btDown = new JButton("v");
e_btDel = new JButton("X");
e_panControl.add(e_btUp);
e_panControl.add(e_btDown);
e_panControl.add(e_btDel);
e_btUp.addActionListener(this);
e_btDown.addActionListener(this);
e_btDel.addActionListener(this);
}
public Component getTableCellEditorComponent(final JTable oTable, final Object oValue,
final boolean arg2, final int iRow, final int iColumn) {
e_row = iRow;
e_table = oTable;
return e_panControl;
}
public Object getCellEditorValue() {return "Buttons";}
public void actionPerformed(final ActionEvent e) {
fireEditingStopped();
Object source = e.getSource();
if(source == e_btUp && e_row > 0){
((DefaultTableModel)e_table.getModel()).moveRow(e_row, e_row, e_row-1);
e_table.changeSelection(e_row-1, 0, false, false);
}
if(source == e_btDown && e_row < e_table.getRowCount()-1){
((DefaultTableModel)e_table.getModel()).moveRow(e_row, e_row, e_row+1);
e_table.changeSelection(e_row+1, 0, false, false);
}
if(source == e_btDel){
((DefaultTableModel)e_table.getModel()).removeRow(e_row);
}
}
}