Java Temelleri : Java`da Table Bileşeni Kullanımı

advertisement
Java'da Table Bileşeni Kullanımı
Java'da Table Bileşeni Kullanımı
Swing'in JTable nesnesi ve TableModel kullanımına ilişikin bir yazı
Swing'de JTable nesnesi MVC (Model-View-Controller / Model - Görünüş - Denetleyici) desenine uygun olarak tablonun verisi ile görsel bileşeni ayrı
tanımlamaya izin verir. JTable, model olmadan da, bir matris (iki boyutlu dizi) verilerek de kullanılabilir. Örneğin
String[] columns=new String[]
{"Ad","Soyad","Ev Tel","Cep Tel","E-Mail"};
String[][] cells=new String[][]{
{"Ali","Yılmaz","622 12 56","533 7234 45 67","[email protected]"},
{"Veli","Kaya","642 01 14","543 257 42 657","[email protected]"},
{"Ahmet","Gül","621 52 12","533 234 25 27","[email protected]"}};
JTable table=new JTable(cells,columns);
şeklinde bir kod parçası bir matristen tablo oluşturabilir.
Bazı durumlarda tablo verisi program çalışmadan önce belli değildir veya çalışma esnasında sürekli değişiyordur. Bu durumda
TableModel arayüzünü gerçekleştirerek verinin gerçek zamanda JTable nesnesine verilmesi sağlanabilir. TableModel programcının
gerçekleştirebileceği bir arayüzdür. Ancak onu genişleten, sadece 3 yöntemi yazarak modelin gerçekleştirilebilmesini sağlayan
AbstractTableModel sınıfı bulunmaktadır. Bunun üç yöntemi, satır sayısını veren bir yöntem, sütün sayısını veren bir yöntem
ve satır ve sütunu verilen bir hücrenin değerini veren bir yöntem. Yöntemler
public int getColumnCount();
public int getRowCount();
public Object getValueAt(int rowIndex, int columnIndex);
şeklinde tanımlı. Elbette bu yöntemler dışında AbstractTableModel'de tanımlı bazı yöntemler ezilebilir.
Burada tablo modeli, bir klasör içerisindeki dosya ve alt klasörleri göstersin. Bunun için tablo modeli gereçekleştiren sınıfta klasöre
ait bir değişken olması yeterlidir. Örnekte üç sütun bulunmaktadır. Dosya adı, boyuru ve yaratılma tarihi. Bu bilgileri verecek
şekilde tablo modelini gerçekleştirmek için
private File directory;
public TableModelTest(File directory){
this.directory=directory;
}
public int getColumnCount(){
return 3;
}
public int getRowCount(){
File[] files=directory.listFiles();
return files.length;
}
public Object getValueAt(int rowIndex, int columnIndex){
File[] files=directory.listFiles();
File file=files[rowIndex];
if(columnIndex==0){
return file.getName();
}else if(columnIndex==1){
if(file.isFile()){
return file.length()+" bayt";
}else{
return "";
}
}else if(columnIndex==2){
DateFormat format=DateFormat.getDateInstance(DateFormat.SHORT);
Date date=new Date(file.lastModified());
return format.format(date);
}
return "";
}
şeklinde bir kod sınıfın içine yazlılabilir. Bu sınıfta File tipindeki nesneyi kullanarak yöntemler gerçekleştirilebilir. Sütün sayısı sabitir : 3.
www.dijitalders.com
Java'da Table Bileşeni Kullanımı
1
Java'da Table Bileşeni Kullanımı
Satır sayısı bir klasörün altındaki dosyaların sayısıdır. Bir hücrenin değeri o satırdaki dosyanın çeşitli bilgilerinden gelir. İlk sütundaki
adı, ikinci sütunda boyutu ve son sütundada oluşturulma tarihi bulunur. Oluşturma tarihi lastModifed() yöntemiyle milisaniye
cinsinden bulunduğu için belli bir tarih biçiminde dönüşütürülüyor.
Gerçekleştirilmesi zorunlu üç yöntem dışında sütun alanlarının belirleyen getColumnName() yöntemi de gerçekleştirilebilir.
private String[] culumnNames=
{"Dosya Adı","Boyut","Son Değiştirilme Tarihi"};
public String getColumnName(int column){
return culumnNames[column];
}
Burada sütun adları dizisi tanımlanmakta yöntemde sütun dizinine göre bir değer döndürülmektedir.
Örneğin tamamı :
import
import
import
import
import
import
import
javax.swing.*;
javax.swing.table.*;
javax.swing.event.*;
java.awt.*;
java.io.*;
java.util.*;
java.text.*;
public class TableModelTest extends AbstractTableModel{
private File directory;
private String[] culumnNames=
{"Dosya Adı","Boyut","Son Değiştirilme Tarihi"};
public TableModelTest(File directory){
this.directory=directory;
}
public int getColumnCount(){
return 3;
}
public int getRowCount(){
File[] files=directory.listFiles();
return files.length;
}
public String getColumnName(int column){
return culumnNames[column];
}
public Object getValueAt(int rowIndex, int columnIndex){
File[] files=directory.listFiles();
File file=files[rowIndex];
if(columnIndex==0){
return file.getName();
www.dijitalders.com
Java'da Table Bileşeni Kullanımı
2
Java'da Table Bileşeni Kullanımı
}else if(columnIndex==1){
if(file.isFile()){
return file.length()+" bayt";
}else{
return "";
}
}else if(columnIndex==2){
DateFormat format=DateFormat.getDateInstance(DateFormat.SHORT);
Date date=new Date(file.lastModified());
return format.format(date);
}
return "";
}
public static void main(String[] args){
JFrame frame=new JFrame();
frame.setBounds(100,100,400,300);
File directory=new File("C:");
TableModelTest model=new TableModelTest(directory);
JTable table=new JTable(model);
frame.getContentPane().add(new JScrollPane(table));
frame.setVisible(true);
}
}
Kaynak www.godoro.com/Portal/Content/Article/ArticleViewPage.aspx
www.dijitalders.com
Java'da Table Bileşeni Kullanımı
3
Download