Refresh.java:执行后,数据每两秒就在JTABLE中添加一条数据bbb(PS:按钮没用)
Nrefresh.java:执行后,单击“Search”按钮开始添加数据,但显示的效果是,3条bbb都添加完了才一起显示出来,为什么不能和Refresh.java那样显示呢???
大虾们,请指教一二。。
附上代码:
//Refresh.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
//////////////////////造成不能刷新的原因可能是actionPerformed,但没有解决!!!!!!!!!!!!!!
public class Refresh extends JFrame{
JPanel contentPane;
JMenuBar jMenuBar1 = new JMenuBar();//菜单栏:file,help...
JMenu jMenuFile = new JMenu();
JMenuItem jMenuFileExit = new JMenuItem();
JToolBar jToolBar = new JToolBar();
JButton jButton2 = new JButton();
//jTable部分
Vector rowData=new Vector();
Vector colName=new Vector();
{
colName.addElement("Module");//addElement要放在方法内
colName.addElement("Address");
colName.addElement("Baudrate");
colName.addElement("Checksum");
colName.addElement("Status");
colName.addElement("Description");
}
DefaultTableModel tableModel = new DefaultTableModel(rowData,colName);
JTable jTable1 = new JTable(tableModel);
JScrollPane scrollPane=new JScrollPane(jTable1);//把jTable加入滚动条 public Refresh() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
contentPane = (JPanel) getContentPane();
setSize(new Dimension(550, 350));
setTitle("Serial_test");
jMenuFile.setText("File");
jMenuFileExit.setText("Exit");
jButton2.setText("Search");//按下次按钮开始添加数据
jToolBar.setBounds(new Rectangle(0, 0, 500, 25));
jMenuBar1.add(jMenuFile);
jMenuFile.add(jMenuFileExit);
setJMenuBar(jMenuBar1);
jToolBar.add(jButton2);
contentPane.add(jToolBar, java.awt.BorderLayout.NORTH);
contentPane.add(scrollPane,null);
Vector data=new Vector();
data.add("aaa");
tableModel.addRow(data);
setVisible(true);/***************只有这里和Nrefresh.java不同 *******************************/ for(int i=0;i<500000000;i++)
;
for (int i=0;i<3;++i)
{
//System.out.println("happy");//可以在DOS串口观察,好像动态显示一样,我就是想在jTable中也这样显示
Vector da=new Vector();
da.add("bbb");
tableModel.addRow(da);///////加入数据
jTable1.validate();
jTable1.updateUI(); ////////////???????????为何此处没有起到刷新作用?????????
for(int j=0;j<500000000;j++)//延时,可以看出数据是一个一个加进来的,
;
}
}
public static void main(String[] args)
{
Refresh ref = new Refresh();
//ref.setVisible(true);
}
}
//Nrefresh.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
//////////////////////造成不能刷新的原因可能是actionPerformed,但没有解决!!!!!!!!!!!!!!
public class Nrefresh extends JFrame implements ActionListener{
JPanel contentPane;
JMenuBar jMenuBar1 = new JMenuBar();//菜单栏:file,help...
JMenu jMenuFile = new JMenu();
JMenuItem jMenuFileExit = new JMenuItem();
JToolBar jToolBar = new JToolBar();
JButton jButton2 = new JButton();
//jTable部分
Vector rowData=new Vector();
Vector colName=new Vector();
{
colName.addElement("Module");//addElement要放在方法内
colName.addElement("Address");
colName.addElement("Baudrate");
colName.addElement("Checksum");
colName.addElement("Status");
colName.addElement("Description");
}
DefaultTableModel tableModel = new DefaultTableModel(rowData,colName);
JTable jTable1 = new JTable(tableModel);
JScrollPane scrollPane=new JScrollPane(jTable1);//把jTable加入滚动条 public Nrefresh() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
contentPane = (JPanel) getContentPane();
setSize(new Dimension(550, 350));
setTitle("Serial_test");
jMenuFile.setText("File");
jMenuFileExit.setText("Exit");
jMenuFileExit.addActionListener(this);
jButton2.setText("Search");//按下次按钮开始添加数据
jButton2.addActionListener(this);
jToolBar.setBounds(new Rectangle(0, 0, 500, 25));
jMenuBar1.add(jMenuFile);
jMenuFile.add(jMenuFileExit);
setJMenuBar(jMenuBar1);
jToolBar.add(jButton2);
contentPane.add(jToolBar, java.awt.BorderLayout.NORTH);
contentPane.add(scrollPane,null);
Vector data=new Vector();
data.add("aaa");
tableModel.addRow(data); }
public void actionPerformed(ActionEvent actionEvent) {//单击search的效果是所有数据一下子蹦出来
if(actionEvent.getActionCommand().equals("Exit"))
System.exit(0);
if(actionEvent.getActionCommand().equals("Search"))
{
for (int i=0;i<3;++i)
{
//System.out.println("happy");//可以在DOS串口观察,好像动态显示一样,我就是想在jTable中也这样显示
Vector da=new Vector();
da.add("bbb");
tableModel.addRow(da);///////加入数据
jTable1.validate();
jTable1.updateUI(); ////////////???????????为何此处没有起到刷新作用?????????
for(int j=0;j<500000000;j++)//延时,可以看出数据是一个一个加进来的,
;
}
}
}
public static void main(String[] args)
{
Nrefresh nref = new Nrefresh();
nref.setVisible(true);
}
}
Nrefresh.java:执行后,单击“Search”按钮开始添加数据,但显示的效果是,3条bbb都添加完了才一起显示出来,为什么不能和Refresh.java那样显示呢???
大虾们,请指教一二。。
附上代码:
//Refresh.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
//////////////////////造成不能刷新的原因可能是actionPerformed,但没有解决!!!!!!!!!!!!!!
public class Refresh extends JFrame{
JPanel contentPane;
JMenuBar jMenuBar1 = new JMenuBar();//菜单栏:file,help...
JMenu jMenuFile = new JMenu();
JMenuItem jMenuFileExit = new JMenuItem();
JToolBar jToolBar = new JToolBar();
JButton jButton2 = new JButton();
//jTable部分
Vector rowData=new Vector();
Vector colName=new Vector();
{
colName.addElement("Module");//addElement要放在方法内
colName.addElement("Address");
colName.addElement("Baudrate");
colName.addElement("Checksum");
colName.addElement("Status");
colName.addElement("Description");
}
DefaultTableModel tableModel = new DefaultTableModel(rowData,colName);
JTable jTable1 = new JTable(tableModel);
JScrollPane scrollPane=new JScrollPane(jTable1);//把jTable加入滚动条 public Refresh() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
contentPane = (JPanel) getContentPane();
setSize(new Dimension(550, 350));
setTitle("Serial_test");
jMenuFile.setText("File");
jMenuFileExit.setText("Exit");
jButton2.setText("Search");//按下次按钮开始添加数据
jToolBar.setBounds(new Rectangle(0, 0, 500, 25));
jMenuBar1.add(jMenuFile);
jMenuFile.add(jMenuFileExit);
setJMenuBar(jMenuBar1);
jToolBar.add(jButton2);
contentPane.add(jToolBar, java.awt.BorderLayout.NORTH);
contentPane.add(scrollPane,null);
Vector data=new Vector();
data.add("aaa");
tableModel.addRow(data);
setVisible(true);/***************只有这里和Nrefresh.java不同 *******************************/ for(int i=0;i<500000000;i++)
;
for (int i=0;i<3;++i)
{
//System.out.println("happy");//可以在DOS串口观察,好像动态显示一样,我就是想在jTable中也这样显示
Vector da=new Vector();
da.add("bbb");
tableModel.addRow(da);///////加入数据
jTable1.validate();
jTable1.updateUI(); ////////////???????????为何此处没有起到刷新作用?????????
for(int j=0;j<500000000;j++)//延时,可以看出数据是一个一个加进来的,
;
}
}
public static void main(String[] args)
{
Refresh ref = new Refresh();
//ref.setVisible(true);
}
}
//Nrefresh.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
//////////////////////造成不能刷新的原因可能是actionPerformed,但没有解决!!!!!!!!!!!!!!
public class Nrefresh extends JFrame implements ActionListener{
JPanel contentPane;
JMenuBar jMenuBar1 = new JMenuBar();//菜单栏:file,help...
JMenu jMenuFile = new JMenu();
JMenuItem jMenuFileExit = new JMenuItem();
JToolBar jToolBar = new JToolBar();
JButton jButton2 = new JButton();
//jTable部分
Vector rowData=new Vector();
Vector colName=new Vector();
{
colName.addElement("Module");//addElement要放在方法内
colName.addElement("Address");
colName.addElement("Baudrate");
colName.addElement("Checksum");
colName.addElement("Status");
colName.addElement("Description");
}
DefaultTableModel tableModel = new DefaultTableModel(rowData,colName);
JTable jTable1 = new JTable(tableModel);
JScrollPane scrollPane=new JScrollPane(jTable1);//把jTable加入滚动条 public Nrefresh() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
contentPane = (JPanel) getContentPane();
setSize(new Dimension(550, 350));
setTitle("Serial_test");
jMenuFile.setText("File");
jMenuFileExit.setText("Exit");
jMenuFileExit.addActionListener(this);
jButton2.setText("Search");//按下次按钮开始添加数据
jButton2.addActionListener(this);
jToolBar.setBounds(new Rectangle(0, 0, 500, 25));
jMenuBar1.add(jMenuFile);
jMenuFile.add(jMenuFileExit);
setJMenuBar(jMenuBar1);
jToolBar.add(jButton2);
contentPane.add(jToolBar, java.awt.BorderLayout.NORTH);
contentPane.add(scrollPane,null);
Vector data=new Vector();
data.add("aaa");
tableModel.addRow(data); }
public void actionPerformed(ActionEvent actionEvent) {//单击search的效果是所有数据一下子蹦出来
if(actionEvent.getActionCommand().equals("Exit"))
System.exit(0);
if(actionEvent.getActionCommand().equals("Search"))
{
for (int i=0;i<3;++i)
{
//System.out.println("happy");//可以在DOS串口观察,好像动态显示一样,我就是想在jTable中也这样显示
Vector da=new Vector();
da.add("bbb");
tableModel.addRow(da);///////加入数据
jTable1.validate();
jTable1.updateUI(); ////////////???????????为何此处没有起到刷新作用?????????
for(int j=0;j<500000000;j++)//延时,可以看出数据是一个一个加进来的,
;
}
}
}
public static void main(String[] args)
{
Nrefresh nref = new Nrefresh();
nref.setVisible(true);
}
}
import java.awt.event.ActionListener;
import java.util.Vector;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SpringLayout;
import javax.swing.UIManager;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableRowSorter;public class Table implements ActionListener
{
private JTable table;
private TableDataModal tableModel;
private TableRowSorter<TableDataModal> sorter; private SpringLayout springLayout; private JFrame frame; private JButton btnAdd; private JButton btnDelete;
@SuppressWarnings("unchecked")
private Vector<Vector> tableDataList = new Vector<Vector>(); public final String[] COLUMN_NAMES = {"序号", "WBS序号", "任务名称", "输出", "实际工时"};
@SuppressWarnings("unchecked")
public final Class[] COLUMN_CLASSES = {Integer.class, Integer.class, String.class, String.class, Double.class}; int serialNumber = 1; public static void main(String args[])
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Table window = new Table();
window.frame.setVisible(true);
}
catch(Exception e)
{
e.printStackTrace();
}
} public Table()
{
initialize();
} private void initialize()
{
frame = new JFrame();
springLayout = new SpringLayout();
frame.getContentPane().setLayout(springLayout);
frame.setTitle("Table");
frame.setBounds(100, 100, 500, 376);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JScrollPane scrollPane = new JScrollPane();
frame.getContentPane().add(scrollPane);
springLayout.putConstraint(SpringLayout.SOUTH, scrollPane, -38, SpringLayout.SOUTH, frame.getContentPane());
springLayout.putConstraint(SpringLayout.NORTH, scrollPane, 0, SpringLayout.NORTH, frame.getContentPane());
springLayout.putConstraint(SpringLayout.EAST, scrollPane, 0, SpringLayout.EAST, frame.getContentPane());
springLayout.putConstraint(SpringLayout.WEST, scrollPane, 0, SpringLayout.WEST, frame.getContentPane()); tableModel = new TableDataModal();
table = new JTable(tableModel);
sorter = new TableRowSorter<TableDataModal>(tableModel);
sorter.toggleSortOrder(0);
table.setRowSorter(sorter);
scrollPane.setViewportView(table); btnAdd = new JButton();
btnAdd.addActionListener(this);
btnAdd.setText("Add");
frame.getContentPane().add(btnAdd);
springLayout.putConstraint(SpringLayout.SOUTH, btnAdd, -4, SpringLayout.SOUTH, frame.getContentPane());
springLayout.putConstraint(SpringLayout.NORTH, btnAdd, -29, SpringLayout.SOUTH, frame.getContentPane());
springLayout.putConstraint(SpringLayout.EAST, btnAdd, -81, SpringLayout.EAST, frame.getContentPane());
springLayout.putConstraint(SpringLayout.WEST, btnAdd, -152, SpringLayout.EAST, frame.getContentPane()); btnDelete = new JButton();
btnDelete.addActionListener(this);
btnDelete.setText("Delete");
frame.getContentPane().add(btnDelete);
springLayout.putConstraint(SpringLayout.SOUTH, btnDelete, -4, SpringLayout.SOUTH, frame.getContentPane());
springLayout.putConstraint(SpringLayout.NORTH, btnDelete, -29, SpringLayout.SOUTH, frame.getContentPane());
springLayout.putConstraint(SpringLayout.EAST, btnDelete, -5, SpringLayout.EAST, frame.getContentPane());
springLayout.putConstraint(SpringLayout.WEST, btnDelete, -76, SpringLayout.EAST, frame.getContentPane());
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == btnAdd)
{
Vector<Object> data = new Vector<Object>();
data.add(serialNumber++);
data.add(002);
data.add("变更");
data.add("无");
data.add(2.5);
tableDataList.add(data);
tableModel.insertRow(1);
}
else if(e.getSource() == btnDelete)
{
if(!tableDataList.isEmpty())
{
tableModel.delRow(0, 0);
}
}
} class TableDataModal extends AbstractTableModel
{
private static final long serialVersionUID = 1L; /**
* 获得表格的总列数
*/
public int getColumnCount()
{
return COLUMN_NAMES.length;
} /**
* 获得表格的总行数
*/
public int getRowCount()
{
return tableDataList.size();
} /**
* 获得表格指定单元格的值
* @param row 行
* @param column 列
*/
public Object getValueAt(int row, int column)
{
Object value = null;
//如果指定单元格非空
if(!tableDataList.isEmpty())
{
value = tableDataList.elementAt(row).elementAt(column);
}
return value;
} /**
* 获得指定列的列名
* @param column 指定的列
*/
public String getColumnName(int column)
{
return COLUMN_NAMES[column];
} /**
* 获得指定的列对象
* @param column 指定的列
*/
@SuppressWarnings("unchecked")
public Class getColumnClass(int column)
{
return COLUMN_CLASSES[column];
} /**
* 获得可编辑的单元格
* @param row 行
* @param column 列
*/
public boolean isCellEditable(int row, int column)
{
return (row == 0) && (column > 2);
} /**
* 设置表格指定单元格的值
* @param 值
* @param row 行
* @param column 列
*/
@SuppressWarnings("unchecked")
public void setValueAt(Object value, int row, int column)
{
tableDataList.elementAt(row).setElementAt(value, column);
fireTableDataChanged();
} /**
* 在表格末尾插入新行
* @param rowCouont 将要插入的新行总数
*/
public void insertRow(int newRowCount)
{
int rowCount = getRowCount();
fireTableRowsInserted(rowCount - newRowCount, rowCount - 1);
}
/**
* 在表格任意位置插入新行
* @param firstRow 开始行
* @param lastRow 结束行
*/
public void insertRow(int firstRow, int lastRow)
{
fireTableRowsInserted(firstRow, lastRow);
} /**
* 删除指定的行
* @param firstRow 开始行
* @param lastRow 结束行
*/
public void delRow(int firstRow, int lastRow)
{
int rowCount = getRowCount();
if(firstRow > rowCount - 1)
{
return;
}
for(int i = lastRow; i >= firstRow; i--)
{
if(i < rowCount)
{
tableDataList.removeElementAt(i);
}
else
{
lastRow--;
}
}
fireTableRowsDeleted(firstRow, lastRow);
}
/**
* 删除所有行
*/
public void delAllRow()
{
int rowCount = getRowCount();
tableDataList.clear();
fireTableRowsDeleted(0, rowCount - 1);
}
}
}