studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones java swing jtable right-click

reales - Java Swing JTable; Haga clic derecho en el menú(¿Cómo puedo obtener "seleccionar" también conocido como resaltar la fila)



libro de android studio en español pdf (2)

Corto: Necesito un "evento de clic derecho" para resaltar la fila de la celda.

Estoy usando una JTable dentro de un ScrollPane en Java Swing (Netbeans Matisse). Tengo un detector de eventos MouseClicked en JTable que hace lo siguiente:

if (evt.getButton() == java.awt.event.MouseEvent.BUTTON3) { System.out.println("Right Click"); JPopUpMenu.show(myJTable, evt.getX(), evt.getY()) }

El problema es ... cada vez que ejecuto un clic derecho en JTable, la fila no se resalta (configuré la selección en filas solo por cierto). He buscado varias funciones setSelected () pero no pude encontrar una adecuada. De forma predeterminada, al hacer clic izquierdo, se resalta automáticamente la fila. ¿Cómo lo configuro para hacer clic derecho?


La respuesta aceptada no toma teclas modificadoras como ctrl o shift en la cuenta, sin embargo, indican que la selección actual no debe ser reemplazada, sino extendida.

Además, agregué compatibilidad con varios sistemas operativos al marcar mousePressed y mouseReleased .

A continuación, puede encontrar un ejemplo completo sobre cómo ajustar las filas seleccionadas, utilizando el ListSelectionModel , incluidas las comprobaciones MouseEvent#getModifiers . Después de eso, es posible abrir un JPopupMenu (opcional).

JPopupMenu contextMenu = new JPopupMenu(); // ... // add elements to the popup menu // ... table.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { handleRowClick(e); if (e.isPopupTrigger()) { doPop(e); } else { hidePop(); } } @Override public void mouseReleased(MouseEvent e) { if (e.isPopupTrigger()) { doPop(e); } } private void handleRowClick(MouseEvent e) { ListSelectionModel selectionModel = table.getSelectionModel(); Point contextMenuOpenedAt = e.getPoint(); int clickedRow = table.rowAtPoint(contextMenuOpenedAt); if (clickedRow < 0) { // No row selected selectionModel.clearSelection(); } else { // Some row selected if ((e.getModifiers() & InputEvent.SHIFT_MASK) == InputEvent.SHIFT_MASK) { int maxSelect = selectionModel.getMaxSelectionIndex(); if ((e.getModifiers() & InputEvent.CTRL_MASK) == InputEvent.CTRL_MASK) { // Shift + CTRL selectionModel.addSelectionInterval(maxSelect, clickedRow); } else { // Shift selectionModel.setSelectionInterval(maxSelect, clickedRow); } } else if ((e.getModifiers() & InputEvent.CTRL_MASK) == InputEvent.CTRL_MASK) { // CTRL selectionModel.addSelectionInterval(clickedRow, clickedRow); } else { // No modifier key pressed selectionModel.setSelectionInterval(clickedRow, clickedRow); } } } private void doPop(MouseEvent e) { if (table.getSelectedRowCount() == 0) { return; } contextMenu.setVisible(true); contextMenu.show(e.getComponent(), e.getX(), e.getY()); } private void hidePop() { contextMenu.setVisible(false); } });


Me gusta esto:

table.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { int r = table.rowAtPoint(e.getPoint()); if (r >= 0 && r < table.getRowCount()) { table.setRowSelectionInterval(r, r); } else { table.clearSelection(); } int rowindex = table.getSelectedRow(); if (rowindex < 0) return; if (e.isPopupTrigger() && e.getComponent() instanceof JTable ) { JPopupMenu popup = createYourPopUp(); popup.show(e.getComponent(), e.getX(), e.getY()); } } });

......