Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTable数据加载_Java_Swing_Jtable_Event Dispatching - Fatal编程技术网

Java 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)

因此,我有一个大型卡片布局,其中一个面板作为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);
在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)是这样吗?如果是这样,最好将其标记为这样。