CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 2 of 2
  1. #1
    Join Date
    Oct 2010
    Posts
    1

    Question dynamically update a JTextField with the sum of values in a JTable

    Hello....
    This has also been posted at:
    http://www.coderanch.com/t/512189/GU...up-dynamically
    and
    http://forums.oracle.com/forums/thre...59375&tstart=0

    I have a single column JTable - where the user may enter integer values. The sum of these values needs to get dynamically updated in a JTextField in a JPanel. How do I do this. Below is my code.

    Thanks.....
    Code:
     import javax.swing.*;  
     import javax.swing.table.*;  
     import javax.swing.event.*;  
     import javax.swing.table.DefaultTableCellRenderer;  
       
     import java.awt.*;  
     import java.util.*;  
     import java.awt.color.*;  
     import java.awt.event.*;  
       
     public class TableandPanel extends JFrame  
     {  
         public static void main(String[] args)  
         {  
             JFrame frame = new JFrame("Table and Panel");  
                                            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
                                            frame.setSize(100, 300);  
               
                                             frame.setVisible(true);  
             String colHdrA = "Some Values";                 
             TableofSums tableofSums = new TableofSums(10, colHdrA);  
             int sumValue = tableofSums.getSumValues();  
             String sumValueS = String.valueOf(sumValue);  
             SumValuesPanel newPanel = new SumValuesPanel( "Score", sumValueS, "Rank");  
             JPanel thePanel = new JPanel();  
             thePanel.add(new JScrollPane(tableofSums));  
             thePanel.add(newPanel);  
             frame.add(thePanel);  
             frame.pack();  
             frame.setVisible(true);  
         }  
     }  
       
     //--------------------------------JTable class starts here---------------------------  
       
     public class TableofSums extends JPanel implements TableModelListener  
     {  
         public static void main(String[] args)  
          {        
              SwingUtilities.invokeLater(new Runnable()   
                 {  
                     public void run()   
                       {             
             JFrame frame = new JFrame("Table");  
             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
             frame.setSize(208, 230);  
             //frame.add(new JScrollPane(table));  
                frame.setVisible(true);  
                String colHdrA = "Some Values";                  
                TableofSums tableofSums = new TableofSums(10, colHdrA);  
                 frame.setContentPane(tableofSums);  
                  //frame.add(new JScrollPane(timerepTable));  
               frame.pack();  
               frame.setVisible(true);  
                         
                   }  
                });  
         }  
           
         private int noOfRows = 0;  
         private JTable table;  
         private String colName = null;  
         private int sumValues = 0;  
           
         public TableofSums(int noOfRows, String colName)  
         {  
             this.noOfRows = noOfRows;  
             this.colName = colName;  
             makeTable();          
         }  
           
         private void makeTable()  
         {  
             Object columns[] = new Object[] {"<html><center>" + this.colName + "</center></html>"};  
               
             Object[][] data = new Object[noOfRows][1];  
               
             for (int i = 0; i<noOfRows; i++)  
                {                
                   data[i][0] = new Integer(0);              
                }  
             DefaultTableModel model = new DefaultTableModel(data, columns);  
                model.addTableModelListener(this);  
                table = new JTable(model)  
                {  
                   @Override  
                   public boolean isCellEditable(int row, int column)   
                   {  
                       switch (column)   
                       {  
                         case 0: return true;  
                       }  
                     return false;  
                   }  
                     
                   @Override  
                   public Class<?> getColumnClass(int columnIndex)   
                   {  
                      switch (columnIndex)   
                      {  
                         case 0: return Integer.class;  
                      }  
                      return null;  
                   }  
                };  
                table.setRowHeight(25);  
                table.setDefaultRenderer(Integer.class, new SomeCellRenderer());  
                 this.add(new JScrollPane(table));  
         } 
    //-------------------------tablemodellistener---------------------------------//
     
          public void tableChanged(TableModelEvent e)  
                         {  
           System.out.println(e.getSource());  
           if(e.getType() == TableModelEvent.UPDATE)  
           {  
               int row = e.getFirstRow();  
               int column = e.getColumn();  
               TableModel model = table.getModel();  
               sumValues = 0;  
               for (int i=0; i<noOfRows; i++)  
               {  
                 int intValue = (Integer)model.getValueAt(i, column);  
                 sumValues += intValue;  
               }  
             System.out.println ("row modified: " + row + " sumValues: " + sumValues);  
           }  
             
          }  
     
    //---------------------------tablecellrenderer-----------------------------------------------       
          public class SomeCellRenderer extends JLabel  implements TableCellRenderer   
             {  
                   
               public SomeCellRenderer()   
               {   
                   setOpaque(true);          
               }  
       
               public Component getTableCellRendererComponent(JTable table, Object  
                       value, boolean isSelected, boolean hasFocus, int row, int column)   
                 {  
                   String cellValue = String.valueOf(value);  
                   this.setText(cellValue);  
                   this.setBackground(Color.LIGHT_GRAY);  
                   this.setHorizontalAlignment(SwingConstants.CENTER);  
                   return this;  
                 }  
             }  
          public int getSumValues()  
          {  
              return sumValues;  
          }  
     }  
       
       
     //-------------------------Panel Class Starts here-------------------------------------  
       
     public class SumValuesPanel extends JPanel  
     {  
         /** 
          * @param args 
          */  
         public static void main(String[] args)  
         {  
             JFrame.setDefaultLookAndFeelDecorated(true);  
             JFrame frame = new JFrame("SumValuesPanel");  
             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
             SumValuesPanel newContentPane = new SumValuesPanel( "Score", "XX.XX", "Rank");  
               
             frame.setContentPane(newContentPane);  
             frame.pack();  
             frame.setVisible(true);  
         }  
           
     //------Variables declaration  
         private JPanel thePanel;        
         private JLabel scorejLabel;  
         private JTextField ScorejTextField;     
         private String scoreLabel;  
         private String scoreValue;  
         private JLabel rankLabel;  
         private String rankLabelTxt;  
         private JTextField rankTextField;  
         private String rankText;  
         //-------End of variables declaration  
           
         public SumValuesPanel (String setScoreLabel,String setScoreVal, String rankLabel)  
         {  
             scoreLabel = setScoreLabel;  
             scoreValue = setScoreVal;  
             this.rankLabelTxt = rankLabel;  
                       
             createSumValuesPanel();  
         }  
           
         private void createSumValuesPanel()  
         {         
              thePanel = new JPanel();  
               
             rankLabel = new JLabel();  
             rankTextField = new JTextField();  
             scorejLabel = new JLabel();  
             ScorejTextField = new JTextField();  
               
             thePanel.setBackground(new Color(235, 233, 230));  
             thePanel.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));  
             thePanel.setPreferredSize(new Dimension(200, 180));  
               
             scorejLabel.setHorizontalAlignment(SwingConstants.CENTER);  
             scorejLabel.setText(scoreLabel);  
             scorejLabel.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));  
             scorejLabel.setPreferredSize(new Dimension(40, 20));  
       
             ScorejTextField.setEditable(false);  
             ScorejTextField.setHorizontalAlignment(JTextField.CENTER);  
             ScorejTextField.setText(scoreValue);  
             ScorejTextField.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));  
             ScorejTextField.setMaximumSize(new Dimension(60, 25));  
             ScorejTextField.setMinimumSize(new Dimension(35, 15));  
             ScorejTextField.setPreferredSize(new Dimension(55, 20));  
               
             rankLabel.setHorizontalAlignment(SwingConstants.CENTER);  
             rankLabel.setText(rankLabelTxt);  
             rankLabel.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));  
             rankLabel.setPreferredSize(new Dimension(90, 20));  
       
             rankTextField.setEditable(false);  
             rankTextField.setBackground(new Color(255,255,0));  
             rankTextField.setHorizontalAlignment(JTextField.CENTER);  
             rankTextField.setText(rankText);  
             rankTextField.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));  
             rankTextField.setPreferredSize(new Dimension(55, 20));  
               
             thePanel.add(scorejLabel);  
             thePanel.add(ScorejTextField);  
             thePanel.add(rankLabel);  
             thePanel.add(rankTextField);  
               
             this.add(thePanel);  
         }  
       
     }

  2. #2
    Join Date
    May 2006
    Location
    UK
    Posts
    4,473

    Re: dynamically update a JTextField with the sum of values in a JTable

    This has been answered at http://forums.oracle.com/forums/thre...59375&tstart=0

    OP: Thanks for posting the links to your other posts.
    Posting code? Use code tags like this: [code]...Your code here...[/code]
    Click here for examples of Java Code

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured