Pessoal, tenho um celleditor
na célula da jtable
, para colocar um Jtextarea
, mas acontece o seguinte: quando eu estou com foco na célula sem entrar em modo de edição e tento digitar algo, ele não digita nada, mas caso eu dê dois clique que foi a maneira q coloquei e entro em modo de edição, ele escreve normal. O problema é que eu quero q quando estiver em modo de foco e tentar digitar algo, para facilitar, ele entre em modo de edição e digite normalmente. Vou postar um exemplo executável para vocês olharem.
classe funcionario:
public class Funcionario {
private String nome;
public Funcionario(String nome, int idade, int matricula) {
this.nome = nome;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
classe FuncionarioTableModel
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
public class FuncionarioTableModel extends AbstractTableModel {
private String colunas[] = {"nome"};
private ArrayList<Funcionario> funcionarios;
private final int COLUNA_NOME = 0;
public FuncionarioTableModel(ArrayList<Funcionario> funcionarios) {
this.funcionarios = funcionarios;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
@Override
public int getRowCount() {
return funcionarios.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public String getColumnName(int indice) {
return colunas[indice];
}
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case COLUNA_NOME:
return String.class;
default:
return String.class;
}
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Funcionario funcionario = this.funcionarios.get(rowIndex);
switch (columnIndex) {
case COLUNA_NOME:
return funcionario.getNome();
}
return null;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Funcionario funcionario = this.funcionarios.get(rowIndex);
switch (columnIndex) {
case COLUNA_NOME:
funcionario.setNome(String.valueOf(aValue));
break;
}
fireTableDataChanged();
}
}
classe JtableExemple:
import java.awt.Component;
import java.awt.EventQueue;
import java.util.ArrayList;
import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
public class JTableExample extends JFrame {
private JTable tabela;
private JScrollPane scrollPainel;
public JTableExample() {
renderizarTela();
}
private void renderizarTela() {
Funcionario f1 = new Funcionario("",0,0);
Funcionario f2 = new Funcionario("", 0, 0);
Funcionario f3 = new Funcionario("", 0, 0);
Funcionario f4 = new Funcionario("", 0, 0);
ArrayList<Funcionario> funcionarios = new ArrayList<>();
funcionarios.add(f1);
funcionarios.add(f2);
funcionarios.add(f3);
funcionarios.add(f4);
FuncionarioTableModel model = new FuncionarioTableModel(funcionarios);
this.tabela = new JTable(model);
this.scrollPainel = new JScrollPane(tabela);
tabela.getColumnModel().getColumn(0).setCellEditor(new TextAreaEditor());
tabela.setRowHeight(50);
this.add(scrollPainel);
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JTableExample tb = new JTableExample();
tb.setLocationRelativeTo(null);
tb.setVisible(true);
}
});
}
}
// celleditor
class TextAreaEditor extends DefaultCellEditor {
protected JScrollPane scrollpane;
protected JTextArea textarea;
public TextAreaEditor() {
super(new JCheckBox());
scrollpane = new JScrollPane();
textarea = new JTextArea();
textarea.setLineWrap(true);
textarea.setWrapStyleWord(true);
// textarea.setBorder(new TitledBorder("This is a JTextArea"));
scrollpane.getViewport().add(textarea);
// colocar para editar em 2 click
setClickCountToStart(2);
//
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
textarea.setText((String) value);
return scrollpane;
}
public Object getCellEditorValue() {
return textarea.getText();
}
}