Bom dia pessoal tudo bem ?
Estou com um problema que já esta me matando faz alguns dias, já n to conseguindo pensar em mais nada para fazer isto da certo !
É o seguinte !! Eu quero fazer um Jtable onde todas as celulas dela tenha o formato de Moeda “R$45,00”, blz eu fiz um render e um editor… até ai blz todas as minhas celulas estão bonitinhas no formato, porem quando eu clico e edito um valor em uma celula e mudo de foco o valor continua o antigo, ele só pega o novo valor se eu apertar enter e depois mudar de facu … gostaria que alguem me ajuda-se a solucionar este problema de focus…
MINHA JTABLE
String[] columnNames = {"Teste",
"Teste",
"Teste",
"Teste",
"Teste"};
Object[][] data = {
{12, 12,12, 12, 12},
{12, 12,12, 12, 12},
{12, 12,12, 12, 12},
{12, 12,12, 12, 12},
{12, 12,12, 12, 12},
{12, 12,12, 12, 12},
{12, 12,12, 12, 12},
{12, 12,12, 12, 12},
{12, 12,12, 12, 12}
};
DefaultTableModel modelo = new DefaultTableModel( data , columnNames );
JTable jTable1 = new JTable( modelo ); // linha e coluna
jTable1.getColumnModel().getColumn(1).setCellEditor(new NumbCellEditor());
jTable1.getColumnModel().getColumn(1).setCellRenderer(new NumbCellRender());
jTable1.getColumnModel().getColumn(2).setCellEditor(new NumbCellEditor());
jTable1.getColumnModel().getColumn(2).setCellRenderer(new NumbCellRender());
jTable1.setBounds(10, 10, 600, 600);
telaPrincipal.add(jTable1);
NumbCellRender
import java.awt.Component;
import java.text.NumberFormat;
import java.util.Locale;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.TableCellRenderer;
public class NumbCellRender extends JLabel implements TableCellRenderer {
/**
* classe para mostrar a celula com formato de moeda
*/
private static final long serialVersionUID = 1L;
private JLabel cell = null;
private NumberFormat formatter = NumberFormat.getCurrencyInstance( new Locale("pt","BR") ); // Locale.getDefault()
private JLabel getCell() {
if (cell == null)
cell = new JLabel();
return cell;
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value != null) {
getCell().setText( formatter.format(value) );
getCell().setHorizontalAlignment(SwingConstants.RIGHT);
} else getCell().setText("");
return getCell();
}
}
NumbCellEditor
import java.awt.Component;
import java.text.NumberFormat;
import java.util.Locale;
import javax.swing.AbstractCellEditor;
import javax.swing.JFormattedTextField;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;
public class NumbCellEditor extends AbstractCellEditor implements TableCellEditor {
/**
* classe para editar a celula com formato de moeda
*/
private static final long serialVersionUID = 1L;
private JFormattedTextField moeda = null;
private NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt","BR"));
private JFormattedTextField getCell() {
if (moeda == null)
moeda = new JFormattedTextField(formatter);
return moeda;
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
getCell().setValue(value);
return getCell();
}
public Object getCellEditorValue() {
return getCell().getValue();
}
}