簡體   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