I need the sum of values from the values entered in the JTable to be shown in the Score text field in the adjoining JPanel.
Also posted here - http://www.coderanch.com/t/512189/GUI/java/value-JTable-show-up-dynamically.
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);
}
}
//---------table 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[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---------------------------------
//gets the values entered in the table and calculates the sum
//-------------------------------------------------------------------------------------------
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);
}
}
//--------------------------------------cell renderer------------------------------------------------------
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);
}
}
Edited by: 799076 on Oct 1, 2010 8:50 AM
Edited by: 799076 on Oct 2, 2010 3:59 AM - added the code tags.
Edited by: 799076 on Oct 2, 2010 4:01 AM