JList点击空白处不让其选中最后一项

这是我在国外一个网站上看到的解决方法,

问题:JList在点击空白处时候,会自动将最后一项作为选中项,这个对于界面的外观,特别是当你有右击菜单时候,会比较麻烦,这个问题也困扰我一上午,后来,经过查阅,在国外的一个论坛问答中找到了答案,下面是解决问题测试代码,你运行就看出来了:

 

import java.awt.EventQueue;

import java.awt.Point;

import java.awt.Toolkit;

import java.awt.event.InputEvent;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

 

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.JScrollPane;

 

public class TestJList {

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {

            public void run() {

                JList list = new JList(new Object[] { "One", "Two", "Three" }) {

                    @Override

                    public int locationToIndex(Point location) {

                        int index = super.locationToIndex(location);

                        if (index != -1 && !getCellBounds(index, index).contains(location)) {

                            return -1;

                        }

                        else {

                            return index;

                        }

                    }

                };

 

                list.addMouseListener(new MouseAdapter() {

 

                    @Override

                    public void mouseClicked(MouseEvent e) {

                        JList list = (JList) e.getSource();

                        if (list.locationToIndex(e.getPoint()) == -1 && !e.isShiftDown()

                                && !isMenuShortcutKeyDown(e)) {

                            list.clearSelection();

                        }

                    }

 

                    private boolean isMenuShortcutKeyDown(InputEvent event) {

                        return (event.getModifiers() & Toolkit.getDefaultToolkit()

                                .getMenuShortcutKeyMask()) != 0;

                    }

                });

 

                JFrame frame = new JFrame("Test");

                frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

                frame.getContentPane().add(new JScrollPane(list));

                frame.pack();

                frame.setLocationRelativeTo(null);

                frame.setVisible(true);

            }

        });

    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值