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;
}
}
java jlist checkbox_JCheckBox检查Java中的JList中的切换逻辑时遇到问题相关推荐
- Java请求参数检查,Java如何检查servlet请求中是否存在参数?
ServletRequest或HttpServletRequest对象具有用于映射参数名称及其值的映射对象.通过访问此映射,我们可以检查servlet请求中是否传递了参数.让我们看下面的例子.pack ...
- 【2022最新Java面试宝典】—— Java异常面试题(33道含答案)
目录 一.Java异常架构与异常关键字 1. Java异常简介 2. Java异常架构 1.Throwable 2. Error(错误) 3. Exception(异常) 运行时异常 编译时异常 3. ...
- 检查Java中的字符串是空还是空[重复]
本文翻译自:Checking if a string is empty or null in Java [duplicate] This question already has an answer ...
- java检测ubuntu_在Ubuntu、Debian、CentOS Linux中检查Java版本的方法
本文介绍在Linux操作系统中使用命令行来检查所安装的Java版本(Java Version),当安装需要特定版本的Java的应用程序时,这很有用.该方法适用于Ubuntu.Debian.CentOS ...
- Eclipse中使用Checkstyle,checkstyle插件检查java代码的自定义配置文件:
摘要:近来项目组在搞代码检查,所以领导让把checkstyle这个插件搞明白,现在我把我们写的自定义的checkstyle.xml文件记录一下,以便大家可以一起使用: 一:要使用checkstyle插 ...
- java数组更新_java刷新数组到jList
好吧,所以我有一个JList和内容提供了一个数组.我知道如何将元素添加到数组,但我想知道如何刷新JList ...或者甚至有可能吗?我试过谷歌. :\java刷新数组到jList import jav ...
- java jlist删除选中的项_java jlist removeListSelectionListener 怎样删除已经建好的 ListSelectionListener...
记错了,不好意思,我写了个小例子,你可以参考下. import java.awt.Dimension; import java.awt.event.ActionEvent; import java.a ...
- 灵魂拷问:如何检查 Java 数组中是否包含某个值 ?
作者 | 沉默王二 责编 | Elle 在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:如何检查Java数组中是否包含某个值 ?像这类灵魂拷问的主题,非常值得深 ...
- java输出两个整数的积_如何检查Java中的两个数字相乘是否会导致溢出?
如何检查Java中的两个数字相乘是否会导致溢出? 我想处理两个数字相乘导致溢出的特殊情况. 代码看起来像这样: int a = 20; long b = 30; // if a or b are bi ...
最新文章
- 抗侧力构件弹性位移如何计算_穿心棒法盖梁施工计算书(工字钢)
- java Graphics2D类
- 今日分享:vue3多层嵌套组件如何访问到最外层组件的数据?
- 世界上最大的搜索引擎公司 Google 宣布与 Elastic 达成战略合作协议
- 为单个Web应用程序配置多个上下文根– JBoss
- 1321. Robot
- [深度学习-实践]条件生成对抗网络cGAN的例子-Tensorflow2.x Keras
- 2_数据分析—认识pandas
- 编程珠玑---第二章 啊哈!算法
- 机器学习:神经网络的模型构建
- Objective-C MVC
- MS SQL中查看text,ntext,image类型数据
- JavaScript函数赋值变量
- itest听力答案2020_2020高中英语听力训练测试与答案
- x86、ARM和MIPS三种主流芯片架构
- 三星:大小屏QLED和OLED两手都要抓,都要硬
- linux游戏掌机,一起来猎奇:窄众平板/游戏掌机推荐
- 微信小程序wx.chooseImage选择图片并上传避坑/真机上传无效
- 大地坐标转换极坐标(球坐标)
- 二维码的生成和解析原理
热门文章
- python封装exe如何返回上一步_如何将python脚本封装成exe程序?
- 使用C与C++混合编程封装UDP协议
- linux 之间 copy 传输文件方法:ftp、samba、sftp、scp、sz/rz
- 被讨厌的勇气--总结
- redisserver是什么问题_面试官老是问:为什么采用单线程的Redis也会如此之快?...
- C++学习之路 | PTA乙级—— 1028 人口普查 (20 分)(精简)
- python matplotlib 散点图_python matplotlib散点图颜色
- 冷藏温度范围_食品冷藏冷冻温度要求与管理规范
- Socket通用TCP通信协议设计及实现(防止粘包,可移植,可靠)
- 现代软件工程讲义 个人项目和结对项目练习 地铁