Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JTable密钥侦听器

JTable密钥侦听器
EN

Stack Overflow用户
提问于 2015-02-14 10:22:11
回答 2查看 2.3K关注 0票数 0

我需要我的JTable来验证给定行的数据,并将列1的组件更改为一个JButton,标签为"Save“(准备保存),如果验证确定数据是安全的。我需要对每一次击键做出反应。

无论我尝试了多少事情,用户似乎都被迫关闭单元编辑器(通过单击其他地方或按Enter键),然后才能评估数据。

您知道有一种方法可以让密钥侦听器(或其他方法)提供即时反馈,而不是强制执行额外的键/鼠标敲击吗?

使用DefaultCellEditor的数据估值仍然需要额外的击键,而KeyBindings (显然不需要)似乎只需要对特定的键做出反应。

是否有一种方法可以提供一个侦听器,以便对编辑器中的每一个击键立即作出反应?

m0skit0对问题的跟进

问:我试过什么?

答:我有一个名为ButtonColumn的类,它是从罗布·卡米克改编而来的,它使用的是TableCellRenderer。

这将验证行数据,如果验证成功,则将单元格呈现为标记为“保存”的JButton,否则将返回带有纯文本标签“新建…”的theDefaultRendererComponent。(红色字体)。

我有另一个实现KeyListener的类,它在用户每次击键时重新绘制表,从而执行SaveButtonRowFormatter验证和呈现(如前所述)。

这是可行的,但只有在关闭的单元格编辑器之后。这就是问题所在:用户必须完成关闭编辑器的工作,才能呈现表并显示保存按钮。这是不直观的,因为没有明显的理由,为什么用户会进行任何击键后,他们确定他们已经成功地填写了记录。此时没有任何保存按钮,他们就被卡住了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-14 11:45:59

是否有一种方法可以提供一个侦听器,以便对编辑器中的每一个击键立即作出反应?

向编辑器的编辑器组件中添加一个DocumentListener。

代码语言:javascript
运行
AI代码解释
复制
DefaultCellEditor dce = (DefaultCellEditor)table.getDefaultEditor(Object.class);
JTextField textField = (JTextField)dce.getComponent();
textField.getDocument().addDocumentListener(...);

有关更多信息,请阅读有关如何编写文档侦听器的Swing教程中的部分。

票数 2
EN

Stack Overflow用户

发布于 2015-02-14 10:50:43

最简单的方法是使用:

代码语言:javascript
运行
AI代码解释
复制
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);

否则,您可以执行以下操作:

在按钮的ActionListener中,您可以简单地执行if(table.getCellEditor()!=null) table.getCellEditor().stopCellEditing();

请参阅此示例,该示例首先打印模型,然后再打印。

要尝试它,只需开始编辑任何单元格,然后按"Save“(没有单击其他任何地方或取消编辑状态),您将看到控制台中的输出是不同的(第二个输出考虑了您所做的最后修改)。

代码语言:javascript
运行
AI代码解释
复制
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class TestEditableTable {

    protected void initUI() {
        JFrame frame = new JFrame(TestEditableTable.class.getSimpleName());
        Vector<Vector<String>> data = new Vector<Vector<String>>();
        for (int i = 0; i < 2; i++) {
            Vector<String> row = new Vector<String>();
            for (int j = 0; j < 5; j++) {
                row.add("Cell " + i + "," + j);
            }
            data.add(row);
        }
        Vector<String> columns = new Vector<String>();
        for (int j = 0; j < 5; j++) {
            columns.add("Column " + j);
        }
        final TableModel model = new DefaultTableModel(data, columns);
        final JTable table = new JTable(model);
        frame.add(new JScrollPane(table), BorderLayout.CENTER);
        JButton save = new JButton("Save");
        save.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                printDataModel(model);
                if (table.getCellEditor() != null) {
                    table.getCellEditor().stopCellEditing();
                }
                printDataModel(model);
            }

            private void printDataModel(final TableModel model) {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < model.getRowCount(); i++) {
                    for (int j = 0; j < model.getColumnCount(); j++) {
                        sb.append(model.getValueAt(i, j)).append(' ');
                    }
                    sb.append("\n");
                }
                System.out.println(sb);
            }
        });
        frame.add(save, BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestEditableTable().initUI();
            }
        });
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28518733

复制
相关文章
Java Swing JTable
JTable用于显示和编辑常规的二维单元格表。有关面向任务的文档和使用JTable的示例,请参见Java教程中的如何使用表。 JTable具有许多功能,可以自定义其呈现和编辑功能,但是为这些功能提供了默认设置,因此可以轻松设置简单的表。例如,要建立一个包含10行10列数字的表:
JavaEdge
2021/02/22
5.2K0
Java Swing JTable
侦听器watch
虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。 这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。
名字是乱打的
2021/12/22
6940
侦听器watch
jTable插件辅助资料
==============================================jTable插件================================================ 【】引入jtable <link rel="stylesheet" type="text/css" href="../jtable/themes/lightcolor/blue/jtable.min.css" /> <script type="text/javascript" src="../jtable/jquery.jtable.min.js"></script> <script type="text/javascript" src="../jtable/localization/jquery.jtable.zh-CN.js"></script> 注:jTable插件需要jquery UI插件。之前要引入jQuery和jQueryUI 【】Servlet生成JSON结果 collegeList=collegeBusiness.getListByAll(); //定义数据返回JSON map Map<String, Object> jsonMap = new HashMap<String, Object>(); jsonMap.put("Result", "OK"); jsonMap.put("Records", collegeList); JSONObject result=JSONObject.fromObject(jsonMap); HttpServletResponse response=ServletActionContext.getResponse(); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); PrintWriter out=response.getWriter(); out.println(result.toString()); out.flush(); out.close(); 【】jtable要求的返回格式 {  "Result":"OK",  "Records":[   {"PersonId":1,"Name":"Benjamin Button","Age":17,"RecordDate":"\/Date(1320259705710)\/"},   {"PersonId":2,"Name":"Douglas Adams","Age":42,"RecordDate":"\/Date(1320259705710)\/"},   {"PersonId":3,"Name":"Isaac Asimov","Age":26,"RecordDate":"\/Date(1320259705710)\/"},   {"PersonId":4,"Name":"Thomas More","Age":65,"RecordDate":"\/Date(1320259705710)\/"}  ] } 【】当出现异常后的jTable要求的结果 {    "Result":"ERROR",    "Message":"异常信息字符串" } 【】jTable的语法  $('#MyTableContainer').jtable({             //General options comes here             actions: {                 //Action definitions comes here             },             fields: {                 //Field definitions comes here             }             //Event handlers... });      【】jtable初始化 1.定义jTable显示的区域div <div id="departmentmaincontent"> </div> 2.在JS中初始化jTable //定义部门表格 $('div#departmentmaincontent').jtable({            title: '部门列表',            selecting: true, //Enable selecting            multiselect: false, //not Allow mu
DencyCheng
2018/11/05
6370
Vue的 侦听器 watch
watch主要用于监控vue实例的变化,它监控的变量当然必须在data里面声明才可以,
wust小吴
2019/12/27
6610
Vue2 侦听器 watch【初识】
1. 侦听器 watch ---- Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性 当属性发生改变时,自动触发属性对应的侦听器。 当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。 2. 基础用法 ---- 当 msg 属性的值发生改变时,就会触发侦听器的执行 <div id="app"> <input type="text" v-model="msg"> </div> <script> let vm = new Vue({ el: '#app', d
很酷的站长
2023/02/17
5520
Vue2 侦听器 watch【初识】
JTable实现双击删除行的方法
这个功能其实很简单,主要搞清楚是用哪些方法就OK了,没涉及什么逻辑上的事情,所以下面直接贴代码,一目了然,呵呵
风柏杨4711
2021/03/15
1.2K0
java winform开发之JTable全攻略
列表在任何一门开发语言中都占有非常重要的地位,在.Net中有GridView,在extjs中有GridPanel。。。,而在java Swing中,它的名字叫JTable。这两天在研究JTable的使用,也有一些收获,所以在这里跟大家分享交流一下,下面的内容将包括:1)JTable的基本用法;2)怎样为JTable添加行点击响应事件,双击后打开窗口;3)怎样为JTable的行添加标识,如行id等;4)怎样在JTable中动态添加新行;
风柏杨4711
2021/03/15
1.3K0
Vue计算属性和侦听器
模板内的表达式非常便利,但放入太多的逻辑会让模板过重且难以维护,所以,对于复杂的逻辑,可以使用计算属性 computed。
Leophen
2019/08/23
6770
Vuejs观察属性-侦听器
与 computed 属性类似,用于观察变量的变化,然后进行相应的处理。 watch 进行实现
hedeqiang
2019/12/17
5240
九.Vue.js的侦听器
九.Vue.js的侦听器
Java架构师必看
2021/05/14
5470
前端基础-计算属性与侦听器
模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。因此我们可以使用方法,来进行运算并返回数据:
cwl_java
2020/03/26
7940
程序化的事件侦听器
也就是说,在其中一个页面中我们使用uni.on或者uni.once,在另一个页面中就可以使用uni.emit进行调用,前提是uni,on或者uni.
阿超
2022/08/17
1.4K0
程序化的事件侦听器
密钥用法 增强密钥用法 证书类型
增强密钥用法: OpenSSL 增强密钥用法:
BUG弄潮儿
2022/06/30
2.2K0
密钥详解
在之前的文章中,我们讲到了对称密码,公钥密码,消息认证码和数字签名等密码学的技术,这些技术中都使用到了一个叫做密钥的东西。
程序那些事
2020/07/08
2.3K0
非对称密钥沉思系列(4):密钥交换
密钥交换,也有称作密钥协商,这套机制,最主要的作用是用来得到通信双方的临时会话密钥。
bowenerchen
2023/01/04
7.2K13
非对称密钥沉思系列(4):密钥交换
windows10产品密钥永久(windows激活密钥)
这就是Windows Key Viewer变得有用的时候,因为可以轻松显示产品密钥。
全栈程序员站长
2022/07/28
6.7K0
windows10产品密钥永久(windows激活密钥)
共享密钥加密与公开密钥加密
加密数据的方法可以分为两种:加密和解密都使用相同密钥的“共享密钥加密”和分别使用不同密钥的“公开密钥加密”。
神奇的程序员
2022/04/10
2.9K0
共享密钥加密与公开密钥加密
【计算机网络】网络安全 : 对称密钥分配 ( 密钥分配 | 密钥分配中心 KDC | 对称密钥分配 | 密钥分配协议 | Kerberos 协议 )
③ 密钥分配 : 是管理中的最重要的问题 , 密钥需要通过 安全通道 进行分配操作 ;
韩曙亮
2023/03/28
6.9K0
【计算机网络】网络安全 : 对称密钥分配 ( 密钥分配 | 密钥分配中心 KDC | 对称密钥分配 | 密钥分配协议 | Kerberos 协议 )
vs2012密钥_ultimate2012产品密钥
Microsoft Visual Studio Ultimate 2012 旗舰版 有效注册密钥:YKCW6-BPFPF-BT8C9-7DCTH-QXGWC;KCW6-BPFPF-BT8C9-7DCTH-QXGWC
全栈程序员站长
2022/11/04
3.2K0
SSH 密钥类型
GitHub 改变了他们的安全协议,不再允许使用使用 SHA-1 加密算法的 RSA 密钥进行访问,而我目前使用 ssh 默认策略生成的就是这种类型的密钥,结果就是无法提交代码。
宋天伦
2023/10/21
7120

相似问题

包含JCheckBoxes的JTable的密钥侦听器

10

JTable密钥绑定

20

JTable选择侦听器

38

JTable侦听器问题

21

JTable单元侦听器JAVA

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档