40 |
|
|
41 |
import java.awt.Color; |
import java.awt.Color; |
42 |
import java.awt.Component; |
import java.awt.Component; |
43 |
|
import java.awt.ComponentOrientation; |
44 |
import java.awt.Dimension; |
import java.awt.Dimension; |
45 |
import java.awt.Graphics; |
import java.awt.Graphics; |
46 |
import java.awt.Point; |
import java.awt.Point; |
367 |
} |
} |
368 |
else if (evt.getKeyCode() == KeyEvent.VK_HOME) |
else if (evt.getKeyCode() == KeyEvent.VK_HOME) |
369 |
{ |
{ |
370 |
if (evt.getModifiers() == (InputEvent.SHIFT_MASK | InputEvent.CTRL_MASK)) |
if (evt.getModifiers() == |
371 |
|
(InputEvent.SHIFT_MASK | InputEvent.CTRL_MASK)) |
372 |
{ |
{ |
373 |
rowModel.setLeadSelectionIndex(0); |
rowModel.setLeadSelectionIndex(0); |
374 |
colModel.setLeadSelectionIndex(colLead); |
colModel.setLeadSelectionIndex(colLead); |
397 |
} |
} |
398 |
else if (evt.getKeyCode() == KeyEvent.VK_PAGE_UP) |
else if (evt.getKeyCode() == KeyEvent.VK_PAGE_UP) |
399 |
{ |
{ |
400 |
// FIXME: implement, need JList.ensureIndexIsVisible to work |
int target; |
401 |
|
if (!evt.isControlDown()) |
402 |
|
{ |
403 |
|
if (rowLead == getFirstVisibleRowIndex()) |
404 |
|
target = Math.max |
405 |
|
(0, rowLead - (getLastVisibleRowIndex() - |
406 |
|
getFirstVisibleRowIndex() + 1)); |
407 |
|
else |
408 |
|
target = getFirstVisibleRowIndex(); |
409 |
|
|
410 |
|
if (evt.getModifiers() == 0) |
411 |
|
{ |
412 |
|
rowModel.setSelectionInterval(target, target); |
413 |
|
colModel.setSelectionInterval(colLead, colLead); |
414 |
|
} |
415 |
|
else if (evt.getModifiers() == InputEvent.SHIFT_MASK) |
416 |
|
{ |
417 |
|
rowModel.setLeadSelectionIndex(target); |
418 |
|
colModel.setLeadSelectionIndex(colLead); |
419 |
|
} |
420 |
|
} |
421 |
|
else |
422 |
|
{ |
423 |
|
if (colLead == getFirstVisibleColumnIndex()) |
424 |
|
target = Math.max |
425 |
|
(0, colLead - (getLastVisibleColumnIndex() - |
426 |
|
getFirstVisibleColumnIndex() + 1)); |
427 |
|
else |
428 |
|
target = getFirstVisibleColumnIndex(); |
429 |
|
|
430 |
|
if (evt.getModifiers() == InputEvent.CTRL_MASK) |
431 |
|
{ |
432 |
|
colModel.setSelectionInterval(target, target); |
433 |
|
rowModel.setSelectionInterval(rowLead, rowLead); |
434 |
|
} |
435 |
|
else if (evt.getModifiers() == |
436 |
|
(InputEvent.SHIFT_MASK | InputEvent.CTRL_MASK)) |
437 |
|
{ |
438 |
|
colModel.setLeadSelectionIndex(target); |
439 |
|
rowModel.setLeadSelectionIndex(rowLead); |
440 |
|
} |
441 |
|
} |
442 |
} |
} |
443 |
else if (evt.getKeyCode() == KeyEvent.VK_PAGE_DOWN) |
else if (evt.getKeyCode() == KeyEvent.VK_PAGE_DOWN) |
444 |
{ |
{ |
445 |
// FIXME: implement, need JList.ensureIndexIsVisible to work |
int target; |
446 |
|
if (!evt.isControlDown()) |
447 |
|
{ |
448 |
|
if (rowLead == getLastVisibleRowIndex()) |
449 |
|
target = Math.min |
450 |
|
(rowMax, rowLead + (getLastVisibleRowIndex() - |
451 |
|
getFirstVisibleRowIndex() + 1)); |
452 |
|
else |
453 |
|
target = getLastVisibleRowIndex(); |
454 |
|
|
455 |
|
if (evt.getModifiers() == 0) |
456 |
|
{ |
457 |
|
rowModel.setSelectionInterval(target, target); |
458 |
|
colModel.setSelectionInterval(colLead, colLead); |
459 |
|
} |
460 |
|
else if (evt.getModifiers() == InputEvent.SHIFT_MASK) |
461 |
|
{ |
462 |
|
rowModel.setLeadSelectionIndex(target); |
463 |
|
colModel.setLeadSelectionIndex(colLead); |
464 |
|
} |
465 |
|
} |
466 |
|
else |
467 |
|
{ |
468 |
|
if (colLead == getLastVisibleColumnIndex()) |
469 |
|
target = Math.min |
470 |
|
(colMax, colLead + (getLastVisibleColumnIndex() - |
471 |
|
getFirstVisibleColumnIndex() + 1)); |
472 |
|
else |
473 |
|
target = getLastVisibleColumnIndex(); |
474 |
|
|
475 |
|
if (evt.getModifiers() == InputEvent.CTRL_MASK) |
476 |
|
{ |
477 |
|
colModel.setSelectionInterval(target, target); |
478 |
|
rowModel.setSelectionInterval(rowLead, rowLead); |
479 |
|
} |
480 |
|
else if (evt.getModifiers() == |
481 |
|
(InputEvent.SHIFT_MASK | InputEvent.CTRL_MASK)) |
482 |
|
{ |
483 |
|
colModel.setLeadSelectionIndex(target); |
484 |
|
rowModel.setLeadSelectionIndex(rowLead); |
485 |
|
} |
486 |
|
} |
487 |
} |
} |
488 |
else if (evt.getKeyCode() == KeyEvent.VK_TAB |
else if (evt.getKeyCode() == KeyEvent.VK_TAB |
489 |
|| evt.getKeyCode() == KeyEvent.VK_ENTER) |
|| evt.getKeyCode() == KeyEvent.VK_ENTER) |
588 |
{ |
{ |
589 |
table.changeSelection(rowLead, colLead, true, false); |
table.changeSelection(rowLead, colLead, true, false); |
590 |
} |
} |
591 |
|
table.scrollRectToVisible |
592 |
|
(table.getCellRect(rowModel.getLeadSelectionIndex(), |
593 |
|
colModel.getLeadSelectionIndex(), false)); |
594 |
} |
} |
595 |
|
|
596 |
public void keyReleased(KeyEvent e) |
public void keyReleased(KeyEvent e) |
600 |
public void keyTyped(KeyEvent e) |
public void keyTyped(KeyEvent e) |
601 |
{ |
{ |
602 |
} |
} |
603 |
|
|
604 |
|
/** |
605 |
|
* Returns the column index of the first visible column. |
606 |
|
* |
607 |
|
*/ |
608 |
|
int getFirstVisibleColumnIndex() |
609 |
|
{ |
610 |
|
ComponentOrientation or = table.getComponentOrientation(); |
611 |
|
Rectangle r = table.getVisibleRect(); |
612 |
|
if (!or.isLeftToRight()) |
613 |
|
r.translate((int) r.getWidth() - 1, 0); |
614 |
|
return table.columnAtPoint(r.getLocation()); |
615 |
|
} |
616 |
|
|
617 |
|
/** |
618 |
|
* Returns the column index of the last visible column. |
619 |
|
* |
620 |
|
*/ |
621 |
|
int getLastVisibleColumnIndex() |
622 |
|
{ |
623 |
|
ComponentOrientation or = table.getComponentOrientation(); |
624 |
|
Rectangle r = table.getVisibleRect(); |
625 |
|
if (or.isLeftToRight()) |
626 |
|
r.translate((int) r.getWidth() - 1, 0); |
627 |
|
return table.columnAtPoint(r.getLocation()); |
628 |
|
} |
629 |
|
|
630 |
|
/** |
631 |
|
* Returns the row index of the first visible row. |
632 |
|
* |
633 |
|
*/ |
634 |
|
int getFirstVisibleRowIndex() |
635 |
|
{ |
636 |
|
ComponentOrientation or = table.getComponentOrientation(); |
637 |
|
Rectangle r = table.getVisibleRect(); |
638 |
|
if (!or.isLeftToRight()) |
639 |
|
r.translate((int) r.getWidth() - 1, 0); |
640 |
|
return table.rowAtPoint(r.getLocation()); |
641 |
|
} |
642 |
|
|
643 |
|
/** |
644 |
|
* Returns the row index of the last visible row. |
645 |
|
* |
646 |
|
*/ |
647 |
|
int getLastVisibleRowIndex() |
648 |
|
{ |
649 |
|
ComponentOrientation or = table.getComponentOrientation(); |
650 |
|
Rectangle r = table.getVisibleRect(); |
651 |
|
r.translate(0, (int) r.getHeight() - 1); |
652 |
|
if (or.isLeftToRight()) |
653 |
|
r.translate((int) r.getWidth() - 1, 0); |
654 |
|
// The next if makes sure that we don't return -1 simply because |
655 |
|
// there is white space at the bottom of the table (ie, the display |
656 |
|
// area is larger than the table) |
657 |
|
if (table.rowAtPoint(r.getLocation()) == -1) |
658 |
|
{ |
659 |
|
if (getFirstVisibleRowIndex() == -1) |
660 |
|
return -1; |
661 |
|
else |
662 |
|
return table.getModel().getRowCount() - 1; |
663 |
|
} |
664 |
|
return table.rowAtPoint(r.getLocation()); |
665 |
|
} |
666 |
} |
} |
667 |
|
|
668 |
class MouseInputHandler implements MouseInputListener |
class MouseInputHandler implements MouseInputListener |