Tu peus essayer ceci:
... private ListSelectionListener rowListener; private int keyPressed; ... rowListener = new ListSelectionListener() { private Rectangle rectToVisible; public void valueChanged(final ListSelectionEvent e) { if (e.getValueIsAdjusting()) { return; } Rectangle visibleRect = table.getVisibleRect(); int visibleRows = visibleRect.height / table.getRowHeight(); int selectedRow = table.getSelectedRow(); rectToVisible = table.getCellRect(selectedRow, 0, true); if(keyPressed == KeyEvent.VK_DOWN){ rectToVisible = table.getCellRect(selectedRow + visibleRows / 2, 0, true); }else if(keyPressed == KeyEvent.VK_UP){ rectToVisible = table.getCellRect(selectedRow - visibleRows / 2, 0, true); } SwingUtilities.invokeLater(new Runnable() { public void run() { table.scrollRectToVisible(rectToVisible); } }); } }; table.getSelectionModel().addListSelectionListener(rowListener); table.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent evt) { keyPressed = evt.getKeyCode(); } public void keyReleased(KeyEvent evt) { keyPressed = -1; } }); ...
|