java – 如何防止JList在单元格边界之外进行选择?

前端之家收集整理的这篇文章主要介绍了java – 如何防止JList在单元格边界之外进行选择?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
“当用户在列表上点击下一个元素时,是否有办法阻止JList选择最后一个元素?”

这是有人问here 的问题,我也有同样的问题.那个家伙发现了一个如此的解决方案(通过重写processMouseEvent()),但是我想知道是否有更好/更优雅的方式来做到这一点.

[编辑]

好的,更多的细节.
如果您有一个JList,并且有一些空格未被任何单元格/元素占用,并且您单击该空间,那么JList中的最后一个元素被选中.

对于一个真实的例子,尝试这个JList Swing Tutorial example,点击空格,看看Rollo被选中.

解决方法

https://forums.oracle.com/forums/thread.jspa?threadID=2206996
  1. import java.awt.EventQueue;
  2. import java.awt.Point;
  3. import java.awt.Toolkit;
  4. import java.awt.event.InputEvent;
  5. import java.awt.event.MouseAdapter;
  6. import java.awt.event.MouseEvent;
  7.  
  8. import javax.swing.JFrame;
  9. import javax.swing.JList;
  10. import javax.swing.JScrollPane;
  11.  
  12. public class TestJList {
  13. public static void main(String[] args) {
  14. EventQueue.invokeLater(new Runnable() {
  15. public void run() {
  16. JList list = new JList(new Object[] { "One","Two","Three" }) {
  17. @Override
  18. public int locationToIndex(Point location) {
  19. int index = super.locationToIndex(location);
  20. if (index != -1 && !getCellBounds(index,index).contains(location)) {
  21. return -1;
  22. }
  23. else {
  24. return index;
  25. }
  26. }
  27. };
  28.  
  29. list.addMouseListener(new MouseAdapter() {
  30.  
  31. @Override
  32. public void mouseClicked(MouseEvent e) {
  33. JList list = (JList) e.getSource();
  34. if (list.locationToIndex(e.getPoint()) == -1 && !e.isShiftDown()
  35. && !isMenuShortcutKeyDown(e)) {
  36. list.clearSelection();
  37. }
  38. }
  39.  
  40. private boolean isMenuShortcutKeyDown(InputEvent event) {
  41. return (event.getModifiers() & Toolkit.getDefaultToolkit()
  42. .getMenuShortcutKeyMask()) != 0;
  43. }
  44. });
  45.  
  46. JFrame frame = new JFrame("Test");
  47. frame.setDefaultCloSEOperation(JFrame.DISPOSE_ON_CLOSE);
  48. frame.getContentPane().add(new JScrollPane(list));
  49. frame.pack();
  50. frame.setLocationRelativeTo(null);
  51. frame.setVisible(true);
  52. }
  53. });
  54. }
  55. }

猜你在找的Java相关文章