2015-05-08 64 views
0

在使用JTable時,根據按下的按鈕加載不同的數據。JTable與2個不同的數據

問題是:當加載其中一個數據時,如果我嘗試加載另一個數據,並將鼠標懸停在標題或單元格上,它將使用來自第一個輸入的數據更新標題/單元格,如果所選標題/單元格中有數據。

關於如何解決它的任何想法?這就是我正在使用的代碼。

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. 
    ); 


} 
+0

我首先想到的是不產生或修改'JTable'本身,只是簡單地將模型切換出來 – MadProgrammer

+0

您似乎是在使用'null'佈局,這可能意味着,基於您的示例,您只是簡單地將新表格重疊在舊錶格的頂部,這就是爲什麼你可能正在畫故障。相反,避免'null'佈局,不要每次都創建一個新的'JTable',而只需用新模型更新現有的'JTable' – MadProgrammer

回答

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佈局。基本上它看起來像是在發生什麼,你只是在彼此的上面堆疊起來,這將部分解釋圖形毛刺,因爲組件實際上是以相同的z深度添加的(本質上)並且彼此競爭,然後他們被更新。

兩個簡單的答案...

  1. 不要使用null佈局。當然,他們「看起來」似乎是一個好主意,但他們傾向於用難以診斷和修復的奇怪而奇妙的方式轉身並咬你。使用佈局管理API,它搖擺設計,而不是創建一個新的JTable/JScrollPane每次圍繞
  2. 更新JTable S模式

How to use tablesLaying Out Components Within a Container

+0

搜索將新標題/數據設置到我的JTable中但找不到方法來取代它(只需刪除或添加它)。 但無論如何,問題是每當數據改變時在UI上添加一個新的scrollPanel,並且舊的仍然在接收我的MouseEvent。每次只需刪除一次scrollPanel,再次添加它就解決了我的問題。 感謝您的幫助! –

+0

'JTable#setModel'將導致整個表被重新加載並且列標題被自動刪除 – MadProgrammer

相關問題