Chapter 13: Creating Windows & Applets 785
//: c13:Table.java
// Simple demonstration of JTable.
// <applet code=Table
// width=350 height=200></applet>
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import javax.swing.event.*;
import com.bruceeckel.swing.*;
public class Table extends JApplet {
JTextArea txt = new JTextArea(4, 20);
// The TableModel controls all the data:
class DataModel extends AbstractTableModel {
Object[][] data = {
{"one", "two", "three", "four"},
{"five", "six", "seven", "eight"},
{"nine", "ten", "eleven", "twelve"},
};
// Prints data when table changes:
class TML implements TableModelListener {
public void tableChanged(TableModelEvent e){
txt.setText(""); // Clear it
for(int i = 0; i < data.length; i++) {
for(int j = 0; j < data[0].length; j++)
txt.append(data[i][j] + " ");
txt.append("\n");
}
}
}
public DataModel() {
addTableModelListener(new TML());
}
public int getColumnCount() {
return data[0].length;
}
public int getRowCount() {
return data.length;
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public void
setValueAt(Object val, int row, int col) {
data[row][col] = val;
// Indicate the change has happened:
fireTableDataChanged();
}
public boolean
isCellEditable(int row, int col) {
return true;
}
}
public void init() {
Container cp = getContentPane();
JTable table = new JTable(new DataModel());
cp.add(new JScrollPane(table));
cp.add(BorderLayout.SOUTH, txt);
}
public static void main(String[] args) {
//Console.run(new Table(), 350, 200);
}
} ///:~//<applet code="Table" width=300 heigh=400>
//</applet>这个例子是think in java上的.你照着套就行了.

解决方案 »

  1.   

    不好意思,我已经看过例子,是无法解决,我才发帖子的。高手能否根据我给的数据写一个应用,设置缺省什么的我都会,我的问题只是在接收到数据时,无法将数据显示在JTABLE上而已
      

  2.   

    用上AbstractTableModel用updateUI()方法是最简单的,要不你就自己写监听
    翻翻以前的帖子!!
      

  3.   

    连能写一个例子的人都没有啊?JTable不至于这么难吧? 能不能不要说指导性的语言?真会的话请帮个忙,万分感谢!!!我写前面的代码了,后面的请帮个忙。AbstractTableModel dataModel;
    JTable table;Constructor codes:
        
        dataModel = new AbstractTableModel(){

                  public int getColumnCount()  {      }
         public int getRowCount()  {         }
                     ......等等 };
        table = new JTable(dataModel);接收到一个recordset[]   每个recordset是一个String[],请高手帮忙写一下下面的代码,把记录显示在table上。
      

  4.   

    看你是真急了~~呵呵
    看看这个能不能满足你的要求,前提是你把你的数据库记录都放到String[][]里
    MyTest类是测试的,MyTable是最主要的
    MyTest.java
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.table.AbstractTableModel;
    import java.awt.event.*;public class MyTest{
        public static void main(String args[]){
       JFrame f=new JFrame();
       String [][] str={{"中国","北京","aaa"},{"日本","东京","ssss"},{"美国","纽约","dddd"}};
      
       MyTable mytable=new MyTable();
      
       mytable.setP(str);       //MODEL对象
      
       JTable contractTable=new JTable(mytable);  //利用MODEL创建表
       Container con=f.getContentPane();
       con.add(contractTable);
         
       f.pack();
       f.setSize(400,300);
       f.show();
    }
      }//利用AbstractTableModel建立表
    class MyTable extends AbstractTableModel{
      private  String[][] p=null;
      private String[] n={"国家","城市","其他"};
      int col=2;
      MyTable(){   }
      public  void setP(String[][] contract){
        p=contract;
      }  //重写AbstractTableModel的方法
       public int getColumnCount(){
          return n.length;
       }
       public int getRowCount(){
          return p.length;
       }
       public Object getValueAt(int row,int col){
          return p[row][col];
       }
       //显示表头
       public String getColumnName(int col){
          return n[col];
       }
    }
      

  5.   

    用DefaultTableModel就行了
    循环:tm.addRow(String[])
    最后tabel.setModel(tm)搞定