2013-05-26 49 views
0

我有一個JTable的信息列表。我強調了使用的列:更新JTable中的突出顯示的行

myTable.addRowSelectionInterval(number,number); 
myTable.setSelectionBackground(Color.yellow); 

number要強調只是該行的數量。

我的程序從包含數字列表的文件中讀取數據,然後突出顯示相應的行。當我關閉程序並將其打開時,這是如此,突出顯示的行將保持突出顯示。

的問題是,我似乎無法更新我JTable如果我使用

addRowSelectionInterval(number,number); 

有什麼辦法「刷新」一個JTable

我見過一些代碼用於刷新表上的值,但這沒有幫助。

我不知道是否因爲我只是突出顯示行。

我使用的是默認JTable

我對「模特」一無所知。這是我第一次製作GUI。

任何人都可以請告訴我如何做到這一點?我很樂意爲您提供幫助。 謝謝。

+1

你確定你是在Swing的線程更新選擇間隔是什麼時候?如果沒有,你可以使用SwingUtilities.invokeLater() –

回答

1

下面的sscce產生預期的結果。作爲@P。 Lalonde評論說,請確認您正在更新event dispatch thread上的選擇。更新TableModel將自動更新視圖,但當前選擇是視圖屬性。

image

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 

/** @see http://stackoverflow.com/a/16765450/230513 */ 
public class Test { 

    private void display() { 
     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JTable table = new JTable(
      new String[][]{{"One"},{"Two"}, {"Three"}}, 
      new String[]{"Ordinal"}); 
     table.addRowSelectionInterval(1, 1); 
     f.add(new JScrollPane(table)); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new Test().display(); 
      } 
     }); 
    } 
} 
+0

來調用你的選擇。我的程序已經做了同樣的事情。 我想也許我沒有詳細解釋我的問題。 我基本上擁有的是Jtable中的作業列表。 實施例: JOB1 JOB2 JOB3 作業4 可以說的是作業1和2已經突出顯示。我想高興job4,但我希望工作1和2保持突出顯示。 – user2423313

+0

在'ActionListener'中使用'table.addRowSelectionInterval(2,2)'適合我。請編輯您的問題以包含展示您遇到的問題的[sscce](http://sscce.org/);從上面的例子開始。 – trashgod