萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 2484|回复: 4

JTable模板的应用

[复制链接]
发表于 2004-5-28 02:13 | 显示全部楼层

JTable模板的应用

前一阵子在搞一个网上对象传输的程序。因为应用到了JTable,老师就给我们推荐了一个JTable的模板,一用下来效果果然不错。这个类里面的方法设置得当,又方便于嵌入GUI使用,所以也给大家介绍一下:
[php]

import java.io.*;
import java.lang.*;
import javax.swing.table.AbstractTableModel;
import java.io.Serializable;

/**
* Datenstruktur fuer eine Tabellenstruktur. Diese Datenstruktur kann
* direkt vom JTable verwendet werden. Ausserdem ist sie Serializable,
* was es erlaubt ueber das Netzwerk zu uebertragen.
*/
public class TableDataModel extends AbstractTableModel implements Serializable{
        private int rowSize=0;
        private int columnSize=0;
        private Object[][] data = null;
        private String[] columnNames = null;
        /**
         * Konstruktor der ein Tabellenstruktur anlegt.
         *
         * @param row Anzahl der Reihen.
         * @param col Anzahl der Spalten.
         *
         * @exception none
         */
        public TableDataModel(int row, int col) {
                rowSize=row;
                columnSize=col;
                data = new Object[row][col];
                columnNames = new String[col];
        }
        /**
         * Liefert die Anzahl Spalten der Tabellenstruktur.
         *
         * @param none
         *
         * @return (Typ: int) Anzahl Spalten.
         * @exception none
         */
        public int getColumnCount() { return columnSize; }
        /**
         * Liefert die Anzahl Spalten der Tabellenstruktur.
         *
         * @param none
         *
         * @return (Typ: int) Anzahl Spalten.
         * @exception none
         */
        public int getRowCount() { return rowSize;}
        /**
         * Liefert den Inhalt aus der Tabellenstruktur am Platz (row,col).
         *
         * @param row Reihenindex.
         * @param col Spaltenindex.
         *
         * @return (Typ: Object) Inhalt des Tabellenfeldes.
         * @exception none
         */
                     public Object getValueAt(int row, int col) { return data[row][col]; }
        /**
         * Liefert Spaltenueberschriftam Platz (col).
         *
         * @param col Spaltenindex.
         *
         * @return (Typ: String) Inhalt der Tabellenueberschrift.
         * @exception none
         */
                      public String getColumnName(int col) { return columnNames[col]; }
        /**
         * Schreiben eines Objektes in die Tabellenstruktur am Platz (row,col).
         *
         * @param val Objekt das in die Tabellenstruktur geschrieben wird.
         * @param row Reihenindex.
         * @param col Spaltenindex.
         *
         * @return none
         * @exception none
         */
        public void setValueAt(Object val, int row, int col) {
                fireTableCellUpdated(row, col);
                data[row][col]=val;
        }
        /**
         * Beschriften der Tabellen am Platz (col).
         *
         * @param titel Spaltenueberschrift.
         * @param col Spaltenindex.
         *
         * @return none
         * @exception none
         */
        public void setColumnNameAt(String titel, int col) { columnNames[col]=titel; }
        /**
         * Methode liefert true, wenn kein Objekt (Wert=null) in speziellen Tabellenstruktur
         * abgespeichert ist.
         *
         * @param row Reihenindex.
         * @param col Spaltenindex.
         *
         * @return (Typ: boolean) Ob es fuer den Benutzer erlaubt ist in der UI einen Wert einzugeben.
         * @exception none
         */
        public boolean isCellEditable(int row, int col) {
                if(data[row][col] == null) return true;
                else return false;
        }
        public String toString() {
                String line = "";
                for(int i=0; i<data.length; i++){
                        for(int j=0; j<data[0].length; j++) {
                        line=line+"("+i+"/"+j+") "+((String) data[j]+" ");
                        }
                }
                System.out.println();
                return line;
        }
}
[/php]
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2004-5-28 02:31 | 显示全部楼层
因为论坛的文本显示效果不好,可能看起来有点乱,大家可以用TEXTPAD或者ECLIPSE来粘贴观看。我们可以看到,这个模板里面有设置行列标题,取行列值和设定行列值的选项,另外还有编辑单个单元格的方法以及相当方便的Object to String 的方法 ,而行列值预定则通过Konstuktur(构造方法)来实现。

下面是我应用JTable的一个很简单的GUI小程序:
[php]
import java.io.*;
import java.util.*;
import java.lang.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

/**
* Fenster-Modell fuer Hitlist
*/
public class Hitlist extends JFrame implements ActionListener{

        static TableDataModel table ;
        static boolean hide = true;

/**
*Konstruktur : Title einstellen
*/
  public Hitlist(String t) {
    super(t);
    }

/**
*Konstruktur : TableDataModel-Objekt einlesen
*/
  public Hitlist(TableDataModel object){
          this.table = object;
  }

/**
*Fenster einstellen
*/
  public void init() {

   TableDataModel ergebnis = new TableDataModel(10,3);
   ergebnis.setColumnNameAt("Name", 0);
   ergebnis.setColumnNameAt("Fehler", 1);
   ergebnis.setColumnNameAt("Zeit", 2);

   for(int i=0;i<5;i++){

           ergebnis.setValueAt("args1", i, 0);
           ergebnis.setValueAt("args2", i, 1);
           ergebnis.setValueAt("args3",i, 2);
   }

   JTable table1 = new JTable(ergebnis);

   JScrollPane scroPanel = new JScrollPane();
   scroPanel.getViewport().add(table1);
   Container container = getContentPane();
   JButton close = new JButton("Close");
   close.addActionListener(this);

   container.add(BorderLayout.NORTH,new JLabel("Welcome !"));
   container.add(BorderLayout.SOUTH,close);
   container.add(BorderLayout.CENTER,scroPanel);
   }


/**
* Events
*/
public void actionPerformed(ActionEvent evt){ System.exit(0);}

/**
*Fenster initialisieren und laufen
*/
public static void main(String[] args){

    Hitlist sw = new Hitlist("Bestenliste");

    sw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    sw.setSize(350,450);
    sw.init();
    sw.setVisible(true);

    }
}
[/php]
大家可以试编译一下,当然TableDataModel也要附在同一目录里面来编译。另外大家也可以用偶前面介绍的JAVADOC来生成注释文档: javadoc *.java;  最后希望大家能够共同探讨,共同进步。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2004-5-28 12:11 | 显示全部楼层
好贴!
我修改了一下代码显示的格式,呵呵。
谢谢daxia;)
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2004-5-29 15:15 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2004-6-1 22:03 | 显示全部楼层
谢谢大家的捧场。大家学习JAVA有什么疑惑或者心得,都可以放上来。研究有利于进步嘛
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网 |网站地图

GMT+2, 2024-5-3 23:21 , Processed in 0.056811 second(s), 16 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表