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

实现TableModelListener时JTable消失

司空劲
2023-03-14

嗨,我希望我的JTable实现TableModelListener,这样如果TableModel的数据发生变化,它就可以做出反应。但是,一旦我在JTable子类中实现了TableModelListener,该表就不再显示在框架中了。

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;


public class JTableDisappears extends JFrame {
    private DefaultTableModel watchlistTableModel;
    private WatchlisttTable watchlistTable;

    public JTableDisappears() {
        super();
        setSize(200,200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        createTable();
        setVisible(true);
    }

    private void createTable() {
        String[] zeilenNamen = { "Name", "Symbol", "Price", "%" };
        String[][] data = { { "1", "AAPL", "3", "4" }, { "A", "2", "C", "D" }, { "2", "B", "3", "4" } };
        watchlistTableModel = new DefaultTableModel(data, zeilenNamen);
        watchlistTableModel.setColumnIdentifiers(zeilenNamen);
        watchlistTable = new WatchlisttTable(watchlistTableModel);
        add(new JScrollPane(watchlistTable));
        
    }

    public static void main(String[] args) {
        new JTableDisappears();

    }

}

class WatchlisttTable extends JTable {

    public WatchlisttTable(TableModel tableModel) {
        super(tableModel);
    }

}

但是如果我让我的JTable子类像这样实现一个TableModelListener:

class WatchlisttTable extends JTable implements TableModelListener{

    public WatchlisttTable(TableModel tableModel) {
        super(tableModel);
        
        
    }

    @Override
    public void tableChanged(TableModelEvent e) {
        
    }

}

该表不再显示在框架中。为什么?我能做些什么来解决这个问题?

共有1个答案

李鸿
2023-03-14

这是因为JTable已经实现了TableModelListener(请参见https://docs.oracle.com/javase/8/docs/api/javax/swing/jtable.html,实现的接口列表),它的TableChanged()方法在JTable类的函数中是必不可少的。

如果需要对tablechanged()事件执行其他操作,也必须从jtable调用方法:

class WatchlisttTable extends JTable {

    public WatchlisttTable(TableModel tableModel) {
        super(tableModel);
    }

    @Override
    public void tableChanged(TableModelEvent e) {
        super.tableChanged(e);
    }
}
 类似资料:
  • 问题内容: 我已经弄清楚了如何正确地对a 进行排序,但是当表单元发生更改时,我无法弄清楚如何自动更新排序顺序。现在,我有这段代码(很长),主要是基于Java教程的How to Use Tables中的代码 。我强调了我所做的更改。在这种情况下,新添加的值可以正确排序,但是当我进入编辑值时,即使我打电话给我,它似乎也没有采取任何措施。 简而言之,当模型中的数据值更改时,如何使表重新排序? 问题答案:

  • 我在JTable上遇到了问题。当我以固定长度的文本字段作为编辑器在单元格中键入时,当达到长度时,我会自动跳到下一行。那样的话,我就可以继续写下去了。之后,当我想更改第一行中的一些文本并双击单元格时,文本将消失。 奇怪的是,当我按“Enter”转到下一行,双击第一行时,文本并没有消失。

  • 问题内容: 这是我第一次在这里发帖,如果我出错了,抱歉。 我正在处理一个JTable,其中的列数据必须验证一些参数,例如: 第3列的值> 30 第4列的值> 10 第5列的值> 4 另外,前2列也被“自动”填充,其余的列则为0。 如果该数据是正确的,则在第5栏中,我将显示一个勾号图像,否则,我将显示一个警告图像。 为了验证这一点,我使用以下代码 此代码的问题是返回堆栈溢出,我不知道该如何处理。 还

  • 我试图理解Swing应用程序中表的具体工作方式。有一个从数据库中检索数据并在JTable上显示数据的表。我浏览了代码,并计算出如何从数据库中读取数据。 我似乎在纠结的一件事是数据如何显示在表上以及如何更新。我知道如何在表中显示数据,但与此表的不同之处在于数据是动态更新的。也就是说,并非从数据库检索的所有数据都显示在表上。 看起来应用程序显示了许多行,当用户滚动鼠标或将滚动条移动到表的底部/末端时,

  • 本文向大家介绍Java JTable 实现日历的示例,包括了Java JTable 实现日历的示例的使用技巧和注意事项,需要的朋友参考一下 效果图: 主要思想:日历最核心的功能就是能显示某年某月对应的日期和星期几。因此只要实现传入具体的年份和月份,得到一组存放了日期的数组a[ ]即可。其中数组的大小设置成42,要考虑的问题是当月的第一天对应星期几。日期数组中的前七个,肯定包含了当月的第一天,把这一