Saturday, 22 March 2014

Adding JLabel and JButton to JTable

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