如果我理解这个问题......

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class JListToggleLogicTest {

private final ClearSelectionListener listener = new ClearSelectionListener();

public JComponent makeUI() {

JList list = new JList(makeModel()) {

@Override public void setSelectionInterval(int anchor, int lead) {

if(anchor==lead && lead>=0 && anchor>=0) {

if(listener.isDragging) {

addSelectionInterval(anchor, anchor);

} else if(!listener.isCellInsideDragging) {

if(isSelectedIndex(anchor)) {

removeSelectionInterval(anchor, anchor);

} else {

addSelectionInterval(anchor, anchor);

}

listener.isCellInsideDragging = true;

}

} else {

super.setSelectionInterval(anchor, lead);

}

}

};

list.setCellRenderer(new CheckBoxCellRenderer());

list.addMouseListener(listener);

list.addMouseMotionListener(listener);

JPanel p = new JPanel(new GridLayout(1,2));

p.add(makeTitledPanel("Default", new JList(makeModel())));

p.add(makeTitledPanel("SelectionInterval", list));

return p;

}

private static DefaultListModel makeModel() {

DefaultListModel model = new DefaultListModel<>();

model.addElement("aaaaaaa");

model.addElement("bbbbbbbbbbbbb");

model.addElement("cccccccccc");

model.addElement("ddddddddd");

model.addElement("eeeeeeeeee");

return model;

}

private static JComponent makeTitledPanel(String title, JComponent c) {

JPanel p = new JPanel(new BorderLayout());

p.setBorder(BorderFactory.createTitledBorder(title));

p.add(new JScrollPane(c));

return p;

}

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

@Override public void run() {

createAndShowGUI();

}

});

}

public static void createAndShowGUI() {

JFrame f = new JFrame();

f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

f.getContentPane().add(new JListToggleLogicTest().makeUI());

f.setSize(320, 240);

f.setLocationRelativeTo(null);

f.setVisible(true);

}

}

class ClearSelectionListener extends MouseAdapter {

private static void clearSelectionAndFocus(JList list) {

list.getSelectionModel().clearSelection();

list.getSelectionModel().setAnchorSelectionIndex(-1);

list.getSelectionModel().setLeadSelectionIndex(-1);

}

private static boolean contains(JList list, Point pt) {

for(int i=0; i

Rectangle r = list.getCellBounds(i, i);

if(r.contains(pt)) return true;

}

return false;

}

private boolean startOutside = false;

private int startIndex = -1;

public boolean isDragging = false;

public boolean isCellInsideDragging = false;

@Override public void mousePressed(MouseEvent e) {

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

startOutside = !contains(list, e.getPoint());

startIndex = list.locationToIndex(e.getPoint());

if(startOutside) {

clearSelectionAndFocus(list);

}

}

@Override public void mouseReleased(MouseEvent e) {

startOutside = false;

isDragging = false;

isCellInsideDragging = false;

startIndex = -1;

}

@Override public void mouseDragged(MouseEvent e) {

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

if(!isDragging && startIndex == list.locationToIndex(e.getPoint())) {

isCellInsideDragging = true;

} else {

isDragging = true;

isCellInsideDragging = false;

}

if(contains(list, e.getPoint())) {

startOutside = false;

isDragging = true; //add:2012-06-01

} else if(startOutside) {

clearSelectionAndFocus(list);

}

}

}

class CheckBoxCellRenderer extends JCheckBox implements ListCellRenderer {

@Override public Component getListCellRendererComponent(

JList extends String> list, String value, int index,

boolean isSelected, boolean cellHasFocus) {

setOpaque(true);

if(isSelected) {

setBackground(list.getSelectionBackground());

setForeground(list.getSelectionForeground());

setSelected(true);

}else{

setBackground(list.getBackground());

setForeground(list.getForeground());

setSelected(false);

}

setText(value);

return this;

}

}

java jlist checkbox_JCheckBox检查Java中的JList中的切换逻辑时遇到问题相关推荐

  1. Java请求参数检查,Java如何检查servlet请求中是否存在参数?

    ServletRequest或HttpServletRequest对象具有用于映射参数名称及其值的映射对象.通过访问此映射,我们可以检查servlet请求中是否传递了参数.让我们看下面的例子.pack ...

  2. 【2022最新Java面试宝典】—— Java异常面试题(33道含答案)

    目录 一.Java异常架构与异常关键字 1. Java异常简介 2. Java异常架构 1.Throwable 2. Error(错误) 3. Exception(异常) 运行时异常 编译时异常 3. ...

  3. 检查Java中的字符串是空还是空[重复]

    本文翻译自:Checking if a string is empty or null in Java [duplicate] This question already has an answer ...

  4. java检测ubuntu_在Ubuntu、Debian、CentOS Linux中检查Java版本的方法

    本文介绍在Linux操作系统中使用命令行来检查所安装的Java版本(Java Version),当安装需要特定版本的Java的应用程序时,这很有用.该方法适用于Ubuntu.Debian.CentOS ...

  5. Eclipse中使用Checkstyle,checkstyle插件检查java代码的自定义配置文件:

    摘要:近来项目组在搞代码检查,所以领导让把checkstyle这个插件搞明白,现在我把我们写的自定义的checkstyle.xml文件记录一下,以便大家可以一起使用: 一:要使用checkstyle插 ...

  6. java数组更新_java刷新数组到jList

    好吧,所以我有一个JList和内容提供了一个数组.我知道如何将元素添加到数组,但我想知道如何刷新JList ...或者甚至有可能吗?我试过谷歌. :\java刷新数组到jList import jav ...

  7. java jlist删除选中的项_java jlist removeListSelectionListener 怎样删除已经建好的 ListSelectionListener...

    记错了,不好意思,我写了个小例子,你可以参考下. import java.awt.Dimension; import java.awt.event.ActionEvent; import java.a ...

  8. 灵魂拷问:如何检查 Java 数组中是否包含某个值 ?

    作者 |  沉默王二 责编 | Elle 在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:如何检查Java数组中是否包含某个值 ?像这类灵魂拷问的主题,非常值得深 ...

  9. java输出两个整数的积_如何检查Java中的两个数字相乘是否会导致溢出?

    如何检查Java中的两个数字相乘是否会导致溢出? 我想处理两个数字相乘导致溢出的特殊情况. 代码看起来像这样: int a = 20; long b = 30; // if a or b are bi ...

最新文章

  1. 抗侧力构件弹性位移如何计算_穿心棒法盖梁施工计算书(工字钢)
  2. java Graphics2D类
  3. 今日分享:vue3多层嵌套组件如何访问到最外层组件的数据?
  4. 世界上最大的搜索引擎公司 Google 宣布与 Elastic 达成战略合作协议
  5. 为单个Web应用程序配置多个上下文根– JBoss
  6. 1321. Robot
  7. [深度学习-实践]条件生成对抗网络cGAN的例子-Tensorflow2.x Keras
  8. 2_数据分析—认识pandas
  9. 编程珠玑---第二章 啊哈!算法
  10. 机器学习:神经网络的模型构建
  11. Objective-C MVC
  12. MS SQL中查看text,ntext,image类型数据
  13. JavaScript函数赋值变量
  14. itest听力答案2020_2020高中英语听力训练测试与答案
  15. x86、ARM和MIPS三种主流芯片架构
  16. 三星:大小屏QLED和OLED两手都要抓,都要硬
  17. linux游戏掌机,一起来猎奇:窄众平板/游戏掌机推荐
  18. 微信小程序wx.chooseImage选择图片并上传避坑/真机上传无效
  19. 大地坐标转换极坐标(球坐标)
  20. 二维码的生成和解析原理

热门文章

  1. python封装exe如何返回上一步_如何将python脚本封装成exe程序?
  2. 使用C与C++混合编程封装UDP协议
  3. linux 之间 copy 传输文件方法:ftp、samba、sftp、scp、sz/rz
  4. 被讨厌的勇气--总结
  5. redisserver是什么问题_面试官老是问:为什么采用单线程的Redis也会如此之快?...
  6. C++学习之路 | PTA乙级—— 1028 人口普查 (20 分)(精简)
  7. python matplotlib 散点图_python matplotlib散点图颜色
  8. 冷藏温度范围_食品冷藏冷冻温度要求与管理规范
  9. Socket通用TCP通信协议设计及实现(防止粘包,可移植,可靠)
  10. 现代软件工程讲义 个人项目和结对项目练习 地铁