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

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

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;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java yaml dump方法_yamlyaml.load与yaml.dump方法

yaml.load与yaml.dump方法该模块提供了一些方法&#xff0c;不过常用的方法只有两个yaml.load和yaml.dump &#xff0c;以下是一个版本相关的yaml 格式文件[root361way yaml]# cat tree.yamltreeroot:branch1:name: Node 1branch1-1:name: Node 1-1branch2:name: Node 2branch2…

vba中有多线程吗_VBA会被Python代替吗?

先说答案&#xff1a;不会被替代这里引用轮子哥的话说&#xff1a;微软只会开发更多的增强型插件来慢慢淡化VBA&#xff0c;但是不会用其他语言取代VBA。早在17年底&#xff0c;就有风声说Python要取代VBA&#xff0c;成为Excel官方脚本语言。我认真翻看了下好多篇文章&#xf…

java 编码实现内存拷贝_java提高篇(六)-----使用序列化实现对象的拷贝

我们知道在Java中存在这个接口Cloneable&#xff0c;实现该接口的类都会具备被拷贝的能力&#xff0c;同时拷贝是在内存中进行&#xff0c;在性能方面比我们直接通过new生成对象来的快&#xff0c;特别是在大对象的生成上&#xff0c;使得性能的提升非常明显。然而我们知道拷贝…

统计一个整数的所有因子的个数_【题解循环嵌套】1095:数1的个数

1095&#xff1a;数1的个数时间限制: 1000 ms 内存限制: 65536 KB【题目描述】给定一个十进制正整数n(1≤n≤10000)&#xff0c;写下从1到n的所有整数&#xff0c;然后数一下其中出现的数字“1”的个数。例如当n2时&#xff0c;写下1,2。这样只出现了1个“1”&#xff1b;当…

运行java是提示 选择未包含 main 类型 如何解决_RuoYi 若依 代码生成器使用教程...

你好&#xff01; 若是你想学习如何使用RuoYi 若依 代码生成器, 能够仔细阅读这篇文章&#xff0c;了解一下RuoYi 若依 代码生成器的基本知识。java新建数据表(注意字段必定要写注释)USE ry;web/*Table structure for table sys_zyq */sqlDROP TABLE IF EXISTS sys_zyq;数据库C…

vb.net 功能f8键事件_憋了三年,史上最全的 F1~F12 键用法整理出来了!

F1~F12 键在Excel表格中的用法&#xff0c;小编很早就想写篇教程整理一下。可三年过去了还没整理出来&#xff0c;原因有很多&#xff0c;总结成一个字&#xff1a;懒&#xff01;这么&#xff0c;终于整理出来了&#xff01;提示&#xff1a;有的电脑启用了FN键&#xff0c;如…

java递归分苹果_递归较难题——分苹果问题

第四届程序设计大赛 苹果Time Limit:1000MS Memory Limit:65536KTotal Submit:90 Accepted:48Description把M个同样的苹果放在N个同样的盘子里&#xff0c;允许有的盘子空着不放&#xff0c;问共有多少种不同的分法&#xff1f;(用K表示)5&#xff0c;1&#xff0c;1和1&#…

usb hid 调试软件_开源USB免驱固件升级软件分享

跳兔科技开源软件分享&#xff0c;免驱的USB固件升级软件&#xff0c;给您的产品提供无限的活力。加快产品上市速度。相信做MCU开发的人都免不了要做boot升级功能&#xff0c;产品投入使用中&#xff0c;如果再使用link进行固件更新的话就比较麻烦&#xff0c;那么拥有一个优秀…

java地址自动拆分_java – Hibernate:每个月自动拆分表

我正在研究一个带有Postgresql和Hibernate的Spring-MVC应用程序,其中我有几个表,行数超过10万(10万).这些表,我95&#xff05;的时间只访问最新的数据,并筛选所有这些行是耗时的.很多时候查询规划器甚至没有使用索引(原因我不知道).然后我想到每周拆分数据库表,所以我们可以先访…

yolo算法_不到2MB,超轻YOLO算法!准确率接近YOLOv3,速度快上45%

点击上方↑↑↑“OpenCV学堂”关注我来源&#xff1a;公众号 量子位 授权最轻的YOLO算法出来了&#xff01;这是个模型非常小、号称目前最快的YOLO算法——大小只有1.3MB&#xff0c;单核每秒148帧&#xff0c;移动设备上也能轻易部署。而且&#xff0c;这个YOLO-Fastest算法满…

mysql报错last packet_mysql The last packet successfully received

mysql服务器最近老是报错&#xff0c;内容如下&#xff1a;The last packet successfully received from the server was 65,502,275 milliseconds ago. The last packet sent successfully to the server was 65,502,276 milliseconds ago. is longer than the server configu…

http请求丢部分数据_温故知新,HTTP/2

去年年底&#xff0c;据国际互联网工程任务组( IETF )消息&#xff0c;HTTP-over-QUIC 实验性协议将被重命名为 HTTP/3&#xff0c;即有望成为 HTTP 协议的第三个正式版本&#xff0c;也就是说HTTP/3可能要来了。 该消息是如此的惹人注目&#xff0c;是因为HTTP是我们身边的协议…

poi java 其他_让POI架起Java与Office之间的桥梁一

本文将阐述如何用POI来读取/写入完整的Excel文件。作者&#xff1a;中国IT实验室 来源&#xff1a;中国IT实验室 2007年8月31日本文将阐述如何用POI来读取/写入完整的Excel文件。约定&#xff1a;POI项目2.0版现在已经接近正式发行阶段&#xff0c;开发进度迅速&#xff0c;不断…

vue ui框架_「webAPP」记录几款比较好用的vue 移动端的ui框架

有时在做项目时&#xff0c;不同场景的项目既要有网站&#xff0c;又要有手机端&#xff0c;为了快速开发&#xff0c;如果功能简单&#xff0c;要求不高的话&#xff0c;我们一般会用H5进行移动端的适配。如果采用纯html进行书写手机端的样式&#xff0c;往往UI的体验感非常差…

java定义基础变量语句_编程语言第一:JAVA语言基础,变量

在前面的几篇文章中我们介绍了Java的运行环境&#xff0c;以及Eclipse IDE的安装与使用。从今天开始我们的文章开始介绍Java开发语言的基础知识。今天主要介绍Java变量。一、什么是变量变量是指代在内存中开辟的存储空间&#xff0c;用于存放运算过程中需要用到的数据。例&…

python keras_深度学习:基于Keras的Python实践

部分初识1初识深度学习/21.1Python的深度学习/21.2软件环境和基本要求/31.2.1Python和SciPy/31.2.2机器学习/31.2.3深度学习/41.3阅读本书的收获/41.4本书说明/41.5本书中的代码/52深度学习生态圈/62.1CNTK/62.1.1安装CNTK/72.1.2CNTK的简单例子/82.2TensorFlow/8部分初识1初识…

php 模拟并发请求_PHP模拟并发请求

原理&#xff1a;使用curl_init()创建多个请求实例&#xff0c;再使用curl_multi_init()批量执行创建的多个请求实例。文件1&#xff1a;curl.php<?php $threads500;//并发请求次数$urlhttp://blog.cn/index.php?;//请求的url//创建一个未定义的curl句柄数组$charray();//…

spring.profiles.active配置了没生效_微服务架构之「 配置中心 」

在微服务架构的系列文章中&#xff0c;前面已经通过文章《微服务架构之「服务网关 」》介绍过了在微服务中服务网关的原理和应用&#xff0c;今天这篇文章我们继续来聊一聊微服务中另外一个重要模块&#xff1a;「 配置中心 」。后面还会继续介绍 服务框架、服务监控、服务治理…

php+正则匹配qq,正则表达式对qq号进行验证的实例

这篇文章主要介绍了正则表达式对qq号码进行校验的相关知识&#xff0c;非常不错&#xff0c;具有参考借鉴价值&#xff0c;需要的的朋友参考下吧废话不多说了&#xff0c;直接给大家贴代码了&#xff0c;具体代码如下所示&#xff1a;package 正则表达式;/*对QQ号码进行校验要求…

公招网报照片审核处理工具_消防员招录报名照片处理工具使用说明

消防员招录报名照片处理工具使用说明请将下载的压缩包文件全部解压后&#xff0c;在照片处理工具文件夹中&#xff0c;用鼠标双击 “消防员招录报名照片处理工具.exe” 运行照片处理工具软件。本工具是消防员招录报名照片处理专用工具&#xff0c;只有经本工具处理符合要求的照…