Bir zaman sayacı, tablodaki bir satırın saniye cinsinden yaşını gösterir. İdeal olarak, saniyede bir kez güncellenir. Biliyorum ki, tablo modelindeki uygun verileri artırabilirim, olayları (her satırda bir), vb. Ateşleyebilirim. Overkill gibi görünüyor! Daha iyi, daha hafif bir yol var mı?JTable hücresinde bir zaman sayacını görüntülemek için etkili bir yol
0
A
cevap
2
İhtiyacın olan:
- tablo modelinde sıranın 'age' modellemek için bir yol. Bu en mantıklı bir şekilde yapılır, böylece satırın oluşturulma süresini bir kez depolar ve hücre değeri istendiğinde yaşı hesaplarsınız (Object getValueAt (satır, sütun)).
- Her saniye tablo değişikliği olayını tetikleyen A (daemon) iş parçacığı. Her satırda bir olay tetiklemek zorunda değilsiniz, bunun yerine tüm sütun güncellemesini gösteren bir olayı tetikleyebilirsiniz. o satır yaşı 'sütun için bir değişiklik olayı böylece masa model daha sonra da, iplik için bir yöntem sunmalıdır
public Object getValueAt (int rowIndex, int columnIndex) { // if it's the column with the 'row age', calculate the age and return it long rowAgeMs = System.currentTimeMs() - getCreationTime(rowIndex); // return the age in milliseconds, or a date, or a formatted time string }
: Burada
masa modeli için bazı pseudocode var
public class MyTableModel TableModel uygular {
private final List<TableModelListener> listeners = new LinkedList<TableModelListener>();
public void addTableModelListener (TableModelListener l) {
listeners.add(l);
}
public void removeTableModelListener (TableModelListener l) {
listeners.remove(l);
}
public void updateColumn (int column) {
TableModelEvent evt = new TableModelEvent(this, 0, Math.max(0, getRowCount() - 1), column);
for (TableModelListener listener : listeners) {
listener.tableChanged(evt);
}
}
sonra sadece updateColumn tetikleyecek iplik (..) yöntemi ea 'row age' sütunu için ikinci saniye. Bu yöntemin başlatılması EventDispatchThread içinde yapılmalıdır, bu SwingUtilities.invokeAndWait (..) veya SwingUtilities.invokeLater (..) kullanılarak yapılır.
Thread rowAgeUpdater = new Thread() {
@Override
public void run() {
while (isAlive()) {
try {
long time = System.currentTimeMillis();
long sleepTime = (time/1000 + 1) * 1000 - time;
Thread.sleep(sleepTime);
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
model.updateColumn(ROW_AGE_COLUMN_INDEX);
}
});
} catch (Exception e) {
return;
}
}
}
};
rowAgeUpdater.setDaemon(true);
rowAgeUpdater.setPriority(Thread.MIN_PRIORITY);
rowAgeUpdater.start();
sürece TableModelEvent ayrıntı düzeyi, sadece güncellenmesi gereken hücreleri kapsar olarak (sizin durumunuzda: satır yaşla birlikte yalnızca sütun), bu fark en etkili yoldur.
İlgili konular
- 1. Vidaları işlemek için etkili bir yol RxJava
- 2. Bir matrisin tersini diyagonal hesaplamak için etkili bir yol
- 3. Bir listeden dizeleri oluşturmak için etkili bir yol
- 4. Bir web uygulamasında hiyerarşik verileri görüntülemek için zarif bir yol
- 5. Grafik teorisi algoritmalarını uygulamada etkili bir yol
- 6. En etkili yol
- 7. Yöneticinin yönetici kimliğini bulmak için etkili bir yol
- 8. Bir zaman (veya zaman aralığı) doldurmanın en etkili yolu nedir?
- 9. Tarih/yyyy sorgusunu çalıştırmak için daha etkili bir yol?
- 10. Verileri birden çok tablodan birleştirmek için etkili bir yol
- 11. Haskell - Algoritmayı tamamlamak için daha etkili bir yol?
- 12. Vektörde bir elemanı sıralamak için en etkili yol?
- 13. En aktif çatalı görüntülemek için sezgisel bir yol
- 14. Visual Studio 2012'deki çakışmaları görüntülemek için herhangi bir yol
- 15. Delphi'de dikey girinti çizgileri görüntülemek için bir yol var mı?
- 16. Bir Sözlüğün tüm öğelerini bir anahtar listesinden almak için en etkili yol?
- 17. JTable
- 18. Seçilen fonksiyon için program sayacını içermiyor
- 19. Bir excel hücresinde bir menüyü açmak için klavye nasıl kullanılır?
- 20. Bot'a karşı etkili bir alan etkili mi?
- 21. Kibrit sayımı bulmak için en etkili yol bir dizi kelime karşı bir dizi var?
- 22. Haritanın bir liste/yinelenebilir anahtardan herhangi birini içerip içermediğini bulmak için etkili bir yol
- 23. Java'da farklı zaman aralıklarında birçok şeyi çalıştırmak için en etkili yol nedir? 6
- 24. İki vektörü R'de lockstep olarak sıralamak için en etkili yol?
- 25. Haskell konsolundan Prelude işlevlerinin bir listesini görüntülemek için bir yol var mı?
- 26. Terminalde tüm özel adım tanımlarının bir listesini görüntülemek için bir yol var mı?
- 27. JTable için setSelectedRow() nerede?
- 28. JTable
- 29. jtable
- 30. JTable