I need to call a method that shows the user a message.
This method must be called just as the user finishes editing a JTable column of type Integer and the user has not entered an integer.
That is, the method should be called the moment the column becomes 'red'.
Below I will put a sample image that the articuno used in one of his posts, just to exemplify when the event should be called.
BelowisthecodeIamdeveloping.
publicclassDados{/***@returnthecoluna0*/publicStringgetColuna0(){returncoluna0;}/***@paramcoluna0thecoluna0toset*/publicvoidsetColuna0(Stringcoluna0){this.coluna0=coluna0;}/***@returnthecolunaInteiro*/publicIntegergetColunaInteiro(){returncolunaInteiro;}/***@paramcolunaInteirothecolunaInteirotoset*/publicvoidsetColunaInteiro(IntegercolunaInteiro){this.colunaInteiro=colunaInteiro;}privateStringcoluna0;privateIntegercolunaInteiro;}
.
publicclassTesteTableModelextendsAbstractTableModel{privateStringcolunas[]={"Coluna0", "colunaInteiro"};
private List<Dados> dados;
private final int COLUNA_0 = 0;
private final int COLUNA_INTEIRO = 1;
public TesteTableModel(List<Dados> dados) {
this.dados = dados;
}
//retorna se a célula é editável ou não
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
//retorna o total de itens(que virarão linhas) da nossa lista
@Override
public int getRowCount() {
return dados.size();
}
//retorna o total de colunas da tabela
@Override
public int getColumnCount() {
return colunas.length;
}
//retorna o nome da coluna de acordo com seu indice
@Override
public String getColumnName(int indice) {
return colunas[indice];
}
//determina o tipo de dado da coluna conforme seu indice
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case COLUNA_0:
return String.class;
case COLUNA_INTEIRO:
return Integer.class;
default:
return String.class;
}
}
//preenche cada célula da tabela
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Dados dados = this.dados.get(rowIndex);
switch (columnIndex) {
case COLUNA_0:
return dados.getColuna0();
case COLUNA_INTEIRO:
return dados.getColunaInteiro();
default:
return null;
}
}
}
.
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.HeadlessException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class GuiPrincipal extends JFrame {
private JTable table;
List<Dados> dados = new ArrayList<Dados>();
public GuiPrincipal(JTable table) throws HeadlessException {
this.table = table;
}
public void addDadosInDados() {
Dados dado = new Dados();
dado.setColuna0("Dado qualquer");
dado.setColunaInteiro(1);
dados.add(dado);
}
public GuiPrincipal() {
setLayout(new FlowLayout());
setSize(new Dimension(700, 300));
setLocationRelativeTo(null);
setTitle("Exemplo JTable");
addDadosInDados();// add dados em dados
table = new JTable(new TesteTableModel(dados));
table.setShowVerticalLines(false);
table.setIntercellSpacing(new Dimension(0, 0));
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}
// este é o método onde é executado nosso programa
public static void main(String[] args) {
GuiPrincipal gui = new GuiPrincipal();
gui.setVisible(true);
}
}
How do I trigger a method right now?