TableModel是壹個接口,實際上返回的是DefaultTableModel類,它實現了TableModel接口。這個類中有壹個方法是void addRow(Object[] rowData)。它就是將壹行插入到JTable中。
不過JTable的setValueAt方法應該就可以實現。
樓主可以定義個壹個線程類來完成。
比如妳需要插入100行數據,可以在線程的run方法中寫壹個循環,在循環中寫兩行代碼,壹行是setValueAt,壹行是刷新JTable,然後再讓線程睡眠,這樣壹行壹行的顯示的效果就可以出來了!
或者樓主可以用進度條來打發等待的時間,就像打開netbeans的那個進度條壹樣,這個可以用JProgressBar類。樓主可以去查看壹下源代碼。如果樓主還是沒有頭緒,我幹脆就寫個例子得了!
關於組件的添加或者類似設置窗口的大小,布局管理器等我就不做解釋了!
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.table.*;
public class Test extends JFrame implements ActionListener
{
private JButton button1;
private JButton button2;
private JButton button3;
private DefaultTableModel model;
private JTable table;
private JProgressBar bar;
private JScrollPane scrollpane;
private JPanel panel;
public Test()
{
button1=new JButton("演示1");
button2=new JButton("演示2");
button3=new JButton("清空");
panel=new JPanel();
bar=new JProgressBar(0,100);
String[] colnames={"數據壹","數據二"};
model=new DefaultTableModel(colnames,100);
table=new JTable(model);
scrollpane=new JScrollPane(table);
panel.setLayout(new FlowLayout());
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
panel.add(button1);
panel.add(button2);
panel.add(button3);
panel.add(bar);
this.setLayout(new GridLayout(2,1));
this.setSize(500,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(scrollpane);
this.add(panel);
}
public void actionPerformed(ActionEvent e)
{
String command=e.getActionCommand();
if(command.equals("演示1"))
{
ShowModel show=new ShowModel(true);
Thread thread=new Thread(show);
thread.start();
}
else if(command.equals("演示2"))
{
ShowModel show=new ShowModel(false);
Thread thread=new Thread(show);
thread.start();
}
else
{
String[] colnames={"數據壹","數據二"};
model=new DefaultTableModel(colnames,100);
table.setModel(model);
}
}
private class ShowModel implements Runnable
{
private boolean type;//當type為true時,則說明是“演示1”的線程,false則相反
public ShowModel(boolean type)
{
this.type=type;
}
public void run()
{
if(type)//這個就是讓線程睡眠,並且設置JTable的值
{
try{
for(int i=0;i<100;i++)
{
Test.this.table.setValueAt(String.valueOf(i),i,0);
Test.this.table.setValueAt(String.valueOf(i),i,1);
Thread.sleep(100);
}
}catch(Exception e)
{
e.printStackTrace();
}
}
else//這個就是進度條的演示
{
try{
Test.this.table.setVisible(false);
for(int i=0;i<100;i++)
{
Test.this.table.setValueAt(String.valueOf(i),i,0);
Test.this.table.setValueAt(String.valueOf(i),i,1);
Test.this.bar.setValue(i+1);
Test.this.bar.setString(String.valueOf(i+1)+"%");
Thread.sleep(40);
if(i==99)
{
Test.this.table.setVisible(true);
JOptionPane.showMessageDialog(Test.this,"OK");
Test.this.bar.setValue(0);
}
}
}catch(Exception e)
{
e.printStackTrace();
}
}
}
}
public static void main(String[] args)
{
Test test=new Test();
test.setVisible(true);
}
}
如果樓主不懂了就問我啊!!