当前位置: 首页 > 知识库问答 >
问题:

JTable不使用CTRL进行多项选择

王叶五
2023-03-14

我试图改变JTable的选择行为,使其能够在不使用CTRL修饰符的情况下向选择添加和移除行。方法:

public void changeSelection(int rowIndex,
                        int columnIndex,
                        boolean toggle,
                        boolean extend)

似乎正是我所要寻找的,尤其是这种情况:

toggle: true, extend: false. If the specified cell is selected, deselect it. If it is not selected, select it. 

是我想做的。问题是我做不到。也许我遗漏了一些关于内部JTable工作的信息,但下面是我的代码:

initComponents();

    mainTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    mainTable.setRowSelectionAllowed(true);

    mainTable.setSelectionModel(new DefaultListSelectionModel() {
        @Override
        public void addSelectionInterval(int index0, int index1) {
            if (index0 == index1) {
                for (int i = 0; i < mainTable.getColumnModel().getColumnCount(); i++) {
                    mainTable.changeSelection(index0, i, true, false);
                }
            }
        }

    });

这似乎是在不务正业。有谁能告诉我问题出在哪里吗?

多谢了。

共有1个答案

聂翼
2023-03-14

您可以创建自定义的ListSelectionModel

简单示例

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ToggleListSelectionModel extends DefaultListSelectionModel
{
    @Override
    public void setSelectionInterval(int index0, int index1)
    {
        //  Select multiple lines

        if (index0 != index1)
        {
            super.addSelectionInterval(index0, index1);
            return;
        }

        //  Toggle selection of a single line

        if  (super.isSelectedIndex(index0))
        {
            super.removeSelectionInterval(index0, index0);
        }
        else
        {
            super.addSelectionInterval(index0, index0);
        }
    }

    private static void createAndShowGUI()
    {
        String[] numbers = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
        final JList<String> list = new JList<String>( numbers );
        list.setVisibleRowCount( numbers.length );
        list.setSelectionModel(new ToggleListSelectionModel());
//      list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

        JButton clear = new JButton("Clear");
        clear.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                list.clearSelection();
            }
        });

        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JScrollPane(list), BorderLayout.CENTER);
        frame.add(clear, BorderLayout.PAGE_END);
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}

该示例针对JList,但JTable也使用ListSelectionModel。

 类似资料:
  • 问题内容: 我目前正在使用JTable来显示数据库中的内容。我想为用户提供便利,以便他可以使用Shift +箭头键选择想要的行数,然后稍后使用提供的删除选项删除那些记录。请提供一个小例子。 问题答案: 您需要允许多项选择: 然后,您需要编写适当的选择侦听器。这有点困难,请尝试在Google相关解决方案中查找。您可以看一个选择侦听器的示例。

  • 如何用vscode选择多行? 在Visual Studio上,您可以按左alt键并选择多行,但它不适用于vscode。

  • 在ListView中,我可以按下< kbd>Ctrl Shift并单击项目进行选择。但是,我想拖动鼠标来选择项目(如DataGridView)。我尝试了下面的代码,我遇到了这样的问题: 我的代码:

  • 问题内容: 我有一个JTable,它的一列是不可编辑的文本,第二列是一个显示布尔值的复选框…。现在我要的是,当用户选择多行并取消选中其中的任何一个时选中的复选框,则选中的所有复选框都应取消选中,反之亦然。 问题答案: 使用@Hovercraft的示例和@camickr的建议,以下示例显示了合适的用户界面。尽管它使用按钮,但它也适用于菜单或弹出窗口。

  • 我正在使用标记为我的搜索框创建一个建议列表,但是我不能从数据列表中选择多个值。当前,我得HTML是:

  • 我对使用MySQL非常陌生,我还在学习。 假设我有3个表在一个数据库。表格如下: 包含ID(PK)和Name 包含ID(主键)、姓名等 包含rol_num(PK),student_id和course_id。 student_id参考学生(id)course_id参考课程(id) 基本上学生详情在学生表中,课程详情在课程表中,入学表是学生及其课程的链接表 使用Select query命令,如何获取所