Java JTable数据加载
因此,我有一个大型卡片布局,其中一个面板作为JTable:Java JTable数据加载,java,swing,jtable,event-dispatching,Java,Swing,Jtable,Event Dispatching,因此,我有一个大型卡片布局,其中一个面板作为JTable: tbm = new DefaultTableModel(); tbm.addColumn("Account Number"); tbm.addColumn("PIN"); tbm.addColumn("Access Level"); tbm.addColumn("Balance"); table = new JTable(tbm); JScrollPane scrollPane = new JScrollPane(table)
tbm = new DefaultTableModel();
tbm.addColumn("Account Number");
tbm.addColumn("PIN");
tbm.addColumn("Access Level");
tbm.addColumn("Balance");
table = new JTable(tbm);
JScrollPane scrollPane = new JScrollPane(table);
在actionPerformed下,我尝试将一些数据加载到表中,如下所示:
else if(event.getSource() == listallButton) {
String query = "SELECT * FROM ATM";
String delimiter = ",";
String input = "go";
int count=0;
al = new ArrayList<String>();
try {
communicationObject = new DataObject();
communicationObject.setMessage(query);
Socket socketToServer = new Socket("sunlab32.njit.edu",31414);
ObjectOutputStream myOutputStream = new ObjectOutputStream(socketToServer.getOutputStream());
ObjectInputStream myInputStream = new ObjectInputStream(socketToServer.getInputStream());
myOutputStream.writeObject(communicationObject);
communicationObject = (DataObject)myInputStream.readObject();
input = communicationObject.getMessage();
if (input != "stop") {
al.add(input);
data[count] = input;
count++; }
for (int i=0;i<data.length;i++) {
row = data[i];
temp = row.split(delimiter);
tbm.addRow(new String[] {temp[0],temp[1],temp[2],temp[3]}); }
tbm.fireTableDataChanged();
table.repaint();
else if(event.getSource()==listallButton){
String query=“从ATM中选择*”;
字符串分隔符=“,”;
字符串输入=“go”;
整数计数=0;
al=新的ArrayList();
试一试{
通信对象=新数据对象();
通信对象setMessage(查询);
Socket socketToServer=新套接字(“sunlab 32.njit.edu”,31414);
ObjectOutputStream myOutputStream=新的ObjectOutputStream(socketToServer.getOutputStream());
ObjectInputStream myInputStream=新ObjectInputStream(socketToServer.getInputStream());
myOutputStream.writeObject(通信对象);
通信对象=(数据对象)myInputStream.readObject();
输入=通信对象。getMessage();
如果(输入!=“停止”){
al.添加(输入);
数据[计数]=输入;
计数+++;}
对于(int i=0;i无需调用tbm.fireTableDataChanged();
。模型本身将通知表以响应。如果表和模型连接正确,表将刷新自身
您可能会发现这很有帮助,它演示了DefaultTableModel
的使用
由于此代码不可见,请确保表和滚动窗格设置正确。此外,请确保您的查询实际返回数据。无需调用tbm.fireTableDataChanged();
。模型本身将通知表以响应。如果表和模型连接正确,表将刷新自身
您可能会发现这很有帮助,它演示了DefaultTableModel
的使用
由于此代码不可见,请确保表和滚动窗格设置正确。此外,请确保您的查询实际返回数据。tbm.addModel
应触发表更改事件,因此不需要tbm.fireTableDataChanged
您可以尝试这样做,在添加所有行后强制它自己绘制
table.setModel(tbm);
离题:
Swing是一个单线程事件模型,这意味着您正在执行的任务将阻止UI更新
我建议您将数据加载移动到SwingWorker,完成更改后将数据推送到UI上。请看一下这个tbm。addModel
应该是触发表更改事件,因此没有必要触发tbm.fireTableDataChanged
您可以尝试这样做,在添加所有行后强制它自己绘制
table.setModel(tbm);
离题:
Swing是一个单线程事件模型,这意味着您正在执行的任务将阻止UI更新
我建议您将数据加载移动到SwingWorker,完成更改后将数据推送到UI上。查看此图1)要更快获得更好的帮助,请发布一个。2)是这样吗?如果是这样,最好将其标记为这样。1)要更快获得更好的帮助,请发布一个。2)是这样吗?如果是这样,最好将其标记为这样。