Boa a tarde a todos,
Estou fazendo um servidor de chat em java, nesse servidor tem uma JTable com todos os clientes conectados…
Eu adicionei um botão nessa JTable para Kickar o cliente, acontece que toda vez que eu clico nesse botão o uso do meu
processador sobe muito, se eu clicar em dois botões o processamento vai de 2% para 100%…
Segue o código do botão
public class ButtonColumn extends AbstractCellEditor implements
TableCellRenderer, TableCellEditor, ActionListener {
private static final long serialVersionUID = 1L;
private JTable table;
private JButton renderButton;
private JButton editButton;
private String text;
private Servidor server;
public ButtonColumn(JTable table, int column, Servidor server) {
super();
this.table = table;
this.server = server;
renderButton = new JButton();
editButton = new JButton();
editButton.setFocusPainted(false);
editButton.addActionListener(this);
editButton.setSize(10, 5);
renderButton.setSize(10, 5);
TableColumnModel columnModel = this.table.getColumnModel();
columnModel.getColumn(column).setCellRenderer(this);
columnModel.getColumn(column).setCellEditor(this);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (hasFocus) {
renderButton.setForeground(table.getForeground());
renderButton.setBackground(UIManager.getColor("Button.background"));
} else if (isSelected) {
renderButton.setForeground(table.getSelectionForeground());
renderButton.setBackground(table.getSelectionBackground());
} else {
renderButton.setForeground(table.getForeground());
renderButton.setBackground(UIManager.getColor("Button.background"));
}
renderButton.setText((value == null) ? "" : value.toString());
return renderButton;
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
text = (value == null) ? "" : value.toString();
editButton.setText(text);
return editButton;
}
public Object getCellEditorValue() {
return text;
}
@Override
public void actionPerformed(ActionEvent e) {
server.kickar();
}
E o método kickar()
public void kickar(){
currentClient = clients.get(tbClientes.getValueAt(tbClientes.getSelectedRow(), 0));
sendData("ATENÇÃO! Você foi kickado do servidor");
sendData("TERMINATE");
removerClient(currentClient.getId());
atualizarGrid();
}
Já tentei varias coisas mas sempre que clico nesse botão o processamento vai lá em cima…