Seguinte eu tenho o seguinte exemplo que funciona muito bem, ele lê duas notas digitadas na tabela e dá a média. O diferencial dele é que ele tem um listener que checa mudanças na jTable e recalcula a média quanto redigitadas. O meu problema é que não estou conseguindo portar isso para um projeto em Netbeans, Alguem pode me ajudar ? Colocarei os dois códigos o que funciona e outro que só tem a jTable montada, Um abraço…
import javax.swing.;
import javax.swing.table.TableModel;
import javax.swing.event.;
import java.awt.Dimension;
import java.awt.event.*;
/* Classe Tabela herda de JPanel
e implementa TableModelListener */
class Tabela extends JPanel implements TableModelListener
{
Object[][] dados = {{“Nome 1”, “”, “”, “”},
{“Nome 2”, “”, “”, “”},
{“Nome 3”, “”, “”, “”}};
String[] nomescolunas = {“Nome”, “Nota 1”, “Nota 2”, “Média”};
JTable table = new JTable(dados, nomescolunas);
TableModel tabela;
/* Método construtor Tabela() responsavel por montar
a tabela e adicionar um TableModelListener */
Tabela()
{
table.setPreferredScrollableViewportSize(new Dimension(300, 50));
JScrollPane painel = new JScrollPane(table);
add(painel);
tabela = table.getModel();
tabela.addTableModelListener(this);
}
/* Responsável por monitorar alterações na tabela. Quando a
tabela é alterada o valor é armazenado e a variável fatorDivisão
é incrementada. Se a variável fatorDivisão for maior que 1 o
programa calcula a média. */
public void tableChanged(TableModelEvent e)
{
if (e.getType() != TableModelEvent.UPDATE) return;
int linha = e.getFirstRow();
int coluna = e.getColumn();
int i = 0, fatorDivisao = 0;
float soma = 0f;
String strCell;
if ((coluna > 0) && (coluna < 3))
{
for (i = 1; i < 3; i++)
{
try
{
strCell = (String)tabela.getValueAt(linha, i);
if (!strCell.equals(""))
{
soma += Float.parseFloat(strCell);
fatorDivisao++;
}
}
catch(NumberFormatException exc) {}
}
if (fatorDivisao > 1)
tabela.setValueAt(new Float(soma/fatorDivisao), linha, 3);
else tabela.setValueAt("", linha, 3);
}
}
/* Inicio do programa */
public static void main(String[] argv)
{
JFrame meuQuadro = new JFrame();
meuQuadro.setContentPane(new Tabela());
meuQuadro.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent evt)
{
System.exit(0);
}
});
meuQuadro.pack();
meuQuadro.setVisible(true);
}
}
*********** Projeto só com a jTable montada em Netbeans
/*
- teste.java
- Created on 19 de Outubro de 2006, 13:50
*/
/**
*
-
@author suporte
*/
public class teste extends javax.swing.JFrame {
/** Creates new form teste */
public teste() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">
private void initComponents() {
painel = new javax.swing.JScrollPane();
table = new javax.swing.JTable();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
table.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{"Nome 1", "", "", ""},
{"Nome 2", "", "", ""},
{"Nome 3", "", "", ""}
},
new String [] {
"Nome", "Nota 1", "Nota 2", "Média"
}
));
painel.setViewportView(table);
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
.addContainerGap(22, Short.MAX_VALUE)
.add(painel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 452, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(29, 29, 29)
.add(painel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 71, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap(28, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new teste().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JScrollPane painel;
private javax.swing.JTable table;
// End of variables declaration
}