Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使JList在单击时的行为与在ctrl+上的行为相同;点击_Java_Swing_Jlist - Fatal编程技术网

Java 使JList在单击时的行为与在ctrl+上的行为相同;点击

Java 使JList在单击时的行为与在ctrl+上的行为相同;点击,java,swing,jlist,Java,Swing,Jlist,我正在寻找一种方法,使JList始终切换所单击项目的选择,而不取消选择其他项目,与ctrl-click的工作方式相同 这似乎是正确的方法,但我不知道那里需要配置什么 如何使JList在单击时的行为与在按住ctrl键单击时的行为相同?也许此代码可以正确执行此操作 import java.awt.Component; import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import javax.swing.*; p

我正在寻找一种方法,使
JList
始终切换所单击项目的选择,而不取消选择其他项目,与ctrl-click的工作方式相同

这似乎是正确的方法,但我不知道那里需要配置什么


如何使JList在单击时的行为与在按住ctrl键单击时的行为相同?

也许此代码可以正确执行此操作

import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class Ctrl_Down_JList {

    private static void createAndShowUI() {
        String[] items = {"Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat"};
        JList myJList = new JList(items) {

            private static final long serialVersionUID = 1L;

            @Override
            protected void processMouseEvent(MouseEvent e) {
                int modifiers = e.getModifiers() | InputEvent.CTRL_MASK;
                // change the modifiers to believe that control key is down
                int modifiersEx = e.getModifiersEx() | InputEvent.CTRL_MASK;
                // can I use this anywhere?  I don't see how to change the modifiersEx of the MouseEvent
                MouseEvent myME = new MouseEvent((Component) e.getSource(), e.getID(), e.getWhen(), modifiers, e.getX(),
                        e.getY(), e.getXOnScreen(), e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger(), e.getButton());
                super.processMouseEvent(myME);
            }
        };
        JFrame frame = new JFrame("Ctrl_Down_JList");
        frame.add(new JScrollPane(myJList));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                createAndShowUI();
            }
        });
    }

您可以使用以下
列表选择模型

list.setSelectionModel(new DefaultListSelectionModel(){
    @Override
    public void setSelectionInterval(int start, int end) {
        if (start != end) {
            super.setSelectionInterval(start, end);
        } else if (isSelectedIndex(start)) {
            removeSelectionInterval(start, end);
        } else {
            addSelectionInterval(start, end);
        }
    }
});

您必须创建自己的ListSelectionModel。试试看

list.setSelectionModel(new DefaultListSelectionModel() 
{
    @Override
    public void setSelectionInterval(int index0, int index1) 
    {
        if(list.isSelectedIndex(index0)) 
        {
            list.removeSelectionInterval(index0, index1);
        }
        else 
        {
            list.addSelectionInterval(index0, index1);
        }
    }
});

这是我经常发现的一段代码,但它只会在单击所选项目时添加切换功能谢谢!!我已经在网上搜索了一段时间,这本书可能有用。如果我需要假钥匙,我会记住这一点:)请参阅我对相关问题的回答: