Monday, April 13, 2015

JTable: How to make a column automatically update its values when the values in the corresponding rows are changed?

If in your JTable, one column stores the value that is the result of certain calculation of the values in other columns, you can let the value of the column to be automatically updated when values in other columns are modified. This can be achieved by using the TableModelListener to monitor changes in the other columns. The following code is an example of how it is done.

import java.awt.Component;
import javax.swing.DefaultCellEditor;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

public class TableCalculationTest extends JFrame {
    JTable table = null;
    DefaultTableModel model = null;
    TableModelListener listener = null;

    public TableCalculationTest() {
        table = new JTable();
        model = new TableModel();
        model.addRow(new Object[] {"Apple", new Float(3.99), new Float(80), new Float(2.00), new Float(100), new Float(519.20)});
        model.addRow(new Object[] {"Apple", new Float(3.99), new Float(65.5), new Float(2.50), new Float(300), new Float(1011.35)});
        model.addRow(new Object[] {"Avacado", new Float(4.99), new Float(15), new Float(3.50), new Float(200), new Float(774.85)});
        table.setModel(model);
        table.getTableHeader().setReorderingAllowed(false);
     
        table.setDefaultRenderer(Float.class, new FloatRenderer());
        table.setDefaultEditor(Float.class, new FloatCellEditor(new JTextField()));
     
        listener = new TableChangeListener();
        model.addTableModelListener(listener);
       
        JScrollPane jsp = new JScrollPane(table);
        getContentPane().add(jsp);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
 
    private class TableChangeListener implements TableModelListener {
        @Override
        public void tableChanged(TableModelEvent e){
            int row = e.getFirstRow();
            int col = e.getColumn();
            //remove the TableModelListener to avoid infinite looping
            model.removeTableModelListener(listener);
            if (col != 0){
                //do the calculation
                Float rowTotal = (Float)model.getValueAt(row, 1) * (Float)model.getValueAt(row, 2) +
                        (Float)model.getValueAt(row, 3) * (Float)model.getValueAt(row, 4);
             
                //set the corresponding field with the calculated value
                model.setValueAt(rowTotal, row, 5);
            }
            //add back the TableModelListener
            model.addTableModelListener(listener);
        }
    }
 
    private class TableModel extends DefaultTableModel{
        public TableModel() {
            setColumnIdentifiers(new Object[] {"Name", "Detail Price", "Detail Order", "WholeSale Price", "Wholesale Order", "Total Charges"});
        }
        public Object getColumnCalss(int col){
            Object type = Float.class;
            if (col == 0){
                type = String.class;
            }
            return type;
        }
     
        @Override
        public void setValueAt(Object v, int row, int col) {
            if (col != 0) {
                if (v instanceof String) {
                    super.setValueAt(Float.parseFloat((String) v), row, col);
                } else {
                    super.setValueAt((Float) v, row, col);
                }
            }
        }
    }
 
    private class FloatRenderer extends DefaultTableCellRenderer {
        JTextField field = new JTextField();
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
            if (value instanceof Float){
                field.setText(String.valueOf((Float)value));
            }
            return field;
        }
    }
 
    private class FloatCellEditor extends DefaultCellEditor{
        private JTextField field = new JTextField();
     
        public FloatCellEditor(JTextField f) {
            super(f);
            field = f;
        }
     
        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column){
            if (value instanceof Float){
                JTextField field = new JTextField();
                field.setText(String.valueOf((Float)value));
            }
            return field;
        }
    }
 
    public static void main(String[] args){
        new TableCalculationTest();
    }
}
       
-------------------------------------------------------------------------------------------------------------------
                        
If you have ever asked yourself these questions, this is the book for you. What is the meaning of life? Why do people suffer? What is in control of my life? Why is life the way it is? How can I stop suffering and be happy? How can I have a successful life? How can I have a life I like to have? How can I be the person I like to be? How can I be wiser and smarter? How can I have good and harmonious relations with others? Why do people meditate to achieve enlightenment? What is the true meaning of spiritual practice? Why all beings are one? Read the book free here.

Thursday, April 2, 2015

NetBeans, SVN command returned with the following error, Can not load remote file for


When right click on the project, choose Subversion, Diff, Diff to Repository, the following error pops up.


This problem can be fixed by following the steps below.


  • Check in all your changes in the directory containing the error causing file.
  • Close NetBeans
  • Open your file explorer, make copy of the directory containing the error causing file to somewhere else, then delete the directory.
  • Open NetBeans, right on the project, select Subversion, then Update, and Update to Head.
---------------------------------------------------------------------------------------------------------------------

                        
If you have ever asked yourself these questions, this is the book for you. What is the meaning of life? Why do people suffer? What is in control of my life? Why is life the way it is? How can I stop suffering and be happy? How can I have a successful life? How can I have a life I like to have? How can I be the person I like to be? How can I be wiser and smarter? How can I have good and harmonious relations with others? Why do people meditate to achieve enlightenment? What is the true meaning of spiritual practice? Why all beings are one? Read the book free here.