Adding JButton to JTable
First we are going to create a class which extends Cell Renderer.
ie.
public class Renderer extends DefaultTableCellRenderer{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column)
{
if(value instanceof JButton){
JButton Button = (JButton)value;
return (JButton)value;
}
else{
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
}
Then create a class MyModel which extends Default Table Model.
ie.
class MyModel extends javax.swing.table.DefaultTableModel{
Object[][] row = new Object[2][2];
Object[] col = {"File Name", "Status"};
public MyModel (){
row[0][0]=new JButton("This File"); //adds button
row[0][1]="HI";
row[1][0]=new JButton("That File"); //adds button
row[1][1]="BYE"; //adds button
}
pack();
//Adding columns
for(Object c: col)
this.addColumn(c);
//Adding rows
for(Object[] r: row)
addRow(r);
}
@Override
public Class getColumnClass(int columnIndex) {
if(columnIndex == 1)return getValueAt(0, columnIndex).getClass(); //Sets JButton on 1 column
else return super.getColumnClass(columnIndex);
}
}
Now to get your table working add the following lines in your JFrame constructor.
jTable1.setModel(new MyModel());
jTable1.setDefaultRenderer(JButton.class, new Renderer());
Adding JLabel to JTable
First we are going to create a class which extends Cell Renderer.
ie.
public class Renderer extends DefaultTableCellRenderer{
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
         boolean hasFocus, int row, int column)
     {
        if(value instanceof JLabel){
             JLabel label = (JLabel)value;
            return (JLabel)value;
        }
        else{
            return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        }
     }
}
Then create a class MyModel which extends Default Table Model.
ie.
class MyModel extends javax.swing.table.DefaultTableModel{
    Object[][] row = new Object[2][2];
    Object[] col = {"File Name", "Status"};
    public MyModel (){
row[0][0]=new JLabel("This File"); //adds label
row[0][1]="HI"; 
row[1][0]=new JLabel("That File"); //adds label
row[1][1]="BYE"; //adds label
 }
       pack();
    //Adding columns
        for(Object c: col)
            this.addColumn(c);
    //Adding rows
        for(Object[] r: row)
            addRow(r);
    }
    @Override
    public Class getColumnClass(int columnIndex) {
        if(columnIndex == 1)return getValueAt(0, columnIndex).getClass(); //Sets JLabel on 1 column
        else return super.getColumnClass(columnIndex);
    }
}
Now to get your table working add the following lines in your JFrame constructor.
jTable1.setModel(new MyModel());
 jTable1.setDefaultRenderer(JLabel.class,  new Renderer());
 
No comments:
Post a Comment