JTable有2个不同的数据

时间:2015-05-08 23:33:22

标签: java swing jtable

我使用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.
    );


}

1 个答案:

答案 0 :(得分:1)

这是可疑的......

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 s ontop,这可以部分解释图形故障,因为组件实际上是在同一个z上添加的-deepthness(基本上)并且相互竞争然后更新。

两个简单的答案......

  1. 不要使用null布局。当然,他们“看起来”似乎是一个好主意,但他们倾向于以奇怪而奇妙的方式转身并咬你,难以诊断和修复。使用Swing围绕
  2. 设计的布局管理API
  3. 更新JTable模型,而不是每次都创建新的JTable / JScrollPane
  4. 请参阅How to use tablesLaying Out Components Within a Container