解决方案 »
- 某外企 机试题
- java中用StringBuffer怎么实现大小写互换
- java 调用linux下sh文件的问题
- 请问: public class JLabel extends JComponent implements SwingConstants,Accessible分别是什么意思呀
- Exception in Thread "main" java.lang.NoClassDefFoundError:Welcome
- 微软和IBM的面试题:
- 在jbuilder x中,怎么查代码行数
- 请教一下JCREATPRO中怎么配置好JAVA3D SDK
- 有谁会这题???
- 一个建议(不给分,不过没有坏处的)
- java 如何读取路由器的外网IP
- java图形用户界面如何去掉顶部的边框
然后 repaint() 这个 JTable 不行么?
其实可以用一个 TabelModel
每次准备好数据后给JTabel setModel(...);
每次更新jtable时setModel就能刷新数据了!
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.*;
import javax.swing.table.*;
import com.item.dao.*;
import com.item.model.*;import java.util.*;
import java.util.List;
public class TestFrame extends JFrame implements Observer{
static int k=0;
static JTable jt=new JTable();//定义成static的只能更新一次数据,然后就不行了,没界面显示了。
static DefaultTableModel dtm=new DefaultTableModel();
BorderLayout borderLayout1 = new BorderLayout();
JScrollPane jScrollPane1 = new JScrollPane();
public TestFrame()
{
try
{
jbInit();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
public void update(Observable arg0, Object arg1) {
String mr=Bytes2HexString((byte[])arg1);
String str=mr.replace("CCFF34","");
System.out.println(str.length()+"===="+str); Type bean=new Type();
TypeDAO tdao=new TypeDAO();
List<Type> tlist=(List<Type>)tdao.selectType(bean);
String[] header = {"tttt", "hhh", "jjjj"};
Object[][] data = new Object[tlist.size()][header.length];
for (int i =0; i < tlist.size(); i++) {
Type tbean = (Type) tlist.get(i);
data[i][0]=tbean.getTid();
data[i][1]=tbean.getTname();
data[i][2]=tbean.getTname();
}
dtm.setDataVector(data, header);
TestFrame.hideColumn(jt, 0);
/*jt.repaint();
jt.getUI();
jt.invalidate();//都是无效的。
jt.revalidate();*/
SerialReader sr=new SerialReader();
sr.openSerialPort("");
}
private void jbInit() throws Exception {
JPanel jp=new JPanel();
JButton jb=new JButton();
JButton jadd=new JButton();
JButton jupdate=new JButton();
JPanel jpt=new JPanel();
this.setLayout(borderLayout1);
jb.setText("Select");
jb.addActionListener(new TestFrame_jb_actionAdapter(this));//使用按钮点击事件肯定是没问题
jp.add(jb);
jadd.setText("Add");
jupdate.setText("Update");
jpt.add(jadd);
jpt.add(jupdate);
jScrollPane1.getViewport().add(jt);
this.add(jp,java.awt.BorderLayout.NORTH);
this.add(jScrollPane1,java.awt.BorderLayout.CENTER);
this.add(jpt,java.awt.BorderLayout.SOUTH);
jt.setModel(dtm);
Type bean=new Type();
TypeDAO tdao=new TypeDAO();
List<Type> tlist=(List<Type>)tdao.selectType(bean);
String[] header = {"number", "type", "name"};
Object[][] data = new Object[tlist.size()][header.length];
for (int i =0; i < tlist.size(); i++) {
Type tbean = (Type) tlist.get(i);
data[i][0]=tbean.getTid();
data[i][1]=tbean.getTid();
data[i][2]=tbean.getTname();
}
dtm.setDataVector(data, header);
TestFrame.hideColumn(jt, 0);
}
public static void main(String[] args)
{
SerialReader sr=new SerialReader();
sr.openSerialPort("");
TestFrame frame=new TestFrame();
frame.setVisible(true);
frame.setSize(800,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void jb_actionPerformed(ActionEvent e) {
Type bean=new Type();
TypeDAO tdao=new TypeDAO();
List<Type> tlist=(List<Type>)tdao.selectType(bean);
String[] header = {"tttt", "gggg", "hhhh"};
Object[][] data = new Object[tlist.size()][header.length];
for (int i =0; i < tlist.size(); i++) {
Type tbean = (Type) tlist.get(i);
data[i][0]=tbean.getTid();
data[i][1]=tbean.getTname();
data[i][2]=tbean.getTname();
}
dtm.setDataVector(data, header);
TestFrame.hideColumn(jt, 0); }
public static void hideColumn(JTable table, int index) {
TableColumn tc = table.getColumnModel().getColumn(index);
tc.setMaxWidth(0);
tc.setPreferredWidth(0);
tc.setWidth(0);
tc.setMinWidth(0);
table.getTableHeader().getColumnModel().getColumn(index).setMaxWidth(0);
table.getTableHeader().getColumnModel().getColumn(index).setMinWidth(0);
}
public static String Bytes2HexString(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
} }
class TestFrame_jb_actionAdapter
implements ActionListener {
private TestFrame adaptee;
TestFrame_jb_actionAdapter(TestFrame adaptee) {
this.adaptee = adaptee;
} public void actionPerformed(ActionEvent e) {
adaptee.jb_actionPerformed(e);
}
}
使用观察者模式看到的上位机数据有更新,就fire Table 的DataModelChanged 事件
就这么简单!
DefaultTableModel model = new DefaultTableModel(data, colName);
chakantable.setModel(model);
}