В настоящее время я пытаюсь использовать слушатель на моем Jtable, но, как выясняется, событие вызывается один раз для каждого элемента в таблице, что делает его очень медленным.Вот код, который я использую:
tabProductos.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
int idProducto = (int) tabProductos.getValueAt(tabProductos.getSelectedRow(), 0);
System.out.println(idProducto);
asignarProdcuto(idProducto);
}
}
});
То же самое происходит с этим другим слушателем:
tabProductos.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (!tabProductos.getSelectionModel().isSelectionEmpty()) {
int idProducto = (int) tabProductos.getValueAt(tabProductos.getSelectedRow(), 0);
System.out.println(idProducto);
asignarProdcuto(idProducto);
}
}
});
Переменная "idProducto" печатается ровно столько раз, сколько есть элементовна столе.Номер правильный.
Я пытался использовать e.getValueIsAdjusting () для второго, но он бесполезен.
Вот полный метод:
public void cargarProductos(ArrayList<Producto> productos) {
DefaultTableModel tm = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
String[] cabecera = {"ID", "Nombre", "Detalle", "Precio Unit.", "idP", "Proveedor"};
tm.setColumnIdentifiers(cabecera);
for (Producto p : productos) {
Object[] row = {p.getId(), p.getNombre(), p.getTamaño(), p.getPrecioUnitario(), p.getProveedor().getId(), p.getProveedor().getNombre()};
tm.addRow(row);
tabProductos.setModel(tm);
tabProductos.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
int idProducto = (int) tabProductos.getValueAt(tabProductos.getSelectedRow(), 0);
System.out.println(idProducto);
}
}
});
tabProductos.getColumn("ID").setMaxWidth(36);
tabProductos.setAutoCreateRowSorter(true);
tabProductos.getTableHeader().setReorderingAllowed(false);
}
}
Спасибо