繁体   English   中英

JTable具有2个不同的数据

[英]JTable with 2 different data

我正在使用JTable,根据所按下的按钮在其上加载不同的数据。

问题是:当加载一个数据时,如果我尝试加载另一个数据,并将鼠标移到标题或单元格上,则如果有数据,它将使用来自第一个输入的数据更新标题/单元格在所选的标题/单元格上。

关于如何解决的任何想法? 那就是我正在使用的代码。

private static void setCompromissosTable(Object[][] data, Object[] header){
    try{
        compromissosTable.removeAll();
    } catch(Exception e){
        e.printStackTrace();
    }

    compromissosTable = new JTable(data, header);
    compromissosTable.setRowSelectionAllowed(true);


    // Make the entire row selectable, but not editable
    int columnMax = compromissosTable.getColumnCount();
    for(int column = 0; column < columnMax; column++){
        Class<?> col_class = compromissosTable.getColumnClass(column);
        compromissosTable.setDefaultEditor(col_class, null);
    }

    scrollPane = new JScrollPane(compromissosTable);
    pane.add(scrollPane);

    scrollPane.setBounds(btnAddCompromisso.getX(), 
            btnAddCompromisso.getHeight() + btnAddCompromisso.getY()  + 5
            , frame1.getWidth() - 20
            , frame1.getHeight() - 20);

    compromissosTable.revalidate();
    compromissosTable.repaint();

    compromissosTable.addMouseListener(new MouseAdapter() {}
     //Change mouse behavior.
    );


}

这可疑...

compromissosTable = new JTable(data, header);
//...
scrollPane = new JScrollPane(compromissosTable);
pane.add(scrollPane);

基本上,假设每次要切换数据集时,都在调用此方法,则每次都创建一个新的JTableJScrollPane ,然后将其添加到UI中。

那以前的JTable呢?

接下来是这个...

scrollPane.setBounds(btnAddCompromisso.getX(), 
        btnAddCompromisso.getHeight() + btnAddCompromisso.getY()  + 5
        , frame1.getWidth() - 20
        , frame1.getHeight() - 20);

看起来您正在使用null布局。 基本上是“看起来”正在发生的事情,是您只是将JScrollPane彼此堆叠在一起,这部分解释了图形故障,因为组件实际上是在相同的z深度处添加的(基本上是),并且彼此竞争,然后对其进行更新。

两个简单的答案...

  1. 不要使用null布局。 当然,他们“似乎”是个好主意,但是他们倾向于以奇怪而奇妙的方式转过身咬你,这很难诊断和修复。 使用Swing围绕其设计的布局管理API
  2. 更新JTable的模型,而不是每次都创建一个新的JTable / JScrollPane

请参阅如何 在容器中 使用表布置组件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM