IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   Java (https://www.ircforumlari.net/java/)
-   -   Java'da Table Bileseni Kullanimi (https://www.ircforumlari.net/java/472082-javada-table-bileseni-kullanimi.html)

YazılımMimarı 11 Nisan 2012 10:50

Java'da Table Bileseni Kullanimi
 
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;

Kod:

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","axxx@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...].com"},
    {"Veli","Kaya","642 01 14","543 257 42 657","
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
"},
    {"Ahmet","Gül","621 52 12","533 234 25 27","zzz@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...].com"}};
  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

Kod:

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

Kod:

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

Kod:

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.

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

Örneğin tamamı :

Kod:

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.awt.*;
import java.io.*;
import java.util.*;
import 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();
    }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);
  }
}

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 04:48.

Powered by vBulletin® Version 3.8.8 Beta 3
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2024 IRCForumlari.Net