Java 在gui中更新Jtable内容,而不重新激活重新绘制表的方法?

Java 在gui中更新Jtable内容,而不重新激活重新绘制表的方法?,java,swing,user-interface,jtable,httpurlconnection,Java,Swing,User Interface,Jtable,Httpurlconnection,我在这里提供的方法应该是创建一个新表,执行回调,然后使用联系人收到的消息更新表。除了接收到的消息之外,所有这些都可以正常工作。我甚至可以再次单击启动回调的按钮,然后它更新表以包含收到的消息,但我添加到代码中的任何内容似乎都不会自动更新表。正如你在这里看到的,我甚至尝试过完全重新绘制表格,但这也不起作用。唯一能让信息显示出来的是重新启动召回 我尝试过重新验证和重新绘制,但这些似乎不起作用 public void doRecall() throws Exception { newFrame

我在这里提供的方法应该是创建一个新表,执行回调,然后使用联系人收到的消息更新表。除了接收到的消息之外,所有这些都可以正常工作。我甚至可以再次单击启动回调的按钮,然后它更新表以包含收到的消息,但我添加到代码中的任何内容似乎都不会自动更新表。正如你在这里看到的,我甚至尝试过完全重新绘制表格,但这也不起作用。唯一能让信息显示出来的是重新启动召回

我尝试过重新验证和重新绘制,但这些似乎不起作用

public void doRecall() throws Exception {

    newFrame = new JFrame("Recall Initiated Awaiting Replies");
    newFrame.setSize(600, 300);
    newFrame.setIconImage(img);

    Member con = new Member();

    String columnNames[] = { "First Name", "Last Name", "Phone No.",
            "Response" };

    Object[][] data = new Object[v.size()][4];

    for (int j = 0; j < v.size(); j++) {

        con = (Member) v.elementAt(k);

        data[j][0] = con.getFName();
        data[j][1] = con.getLName();
        data[j][2] = con.getPhoneNo();
        data[j][3] = con.getResponse();

        k++;

    }
    k = 0;

    abtable = new JTable(data, columnNames);

    JScrollPane scrollPane = new JScrollPane(abtable);
    abtable.setPreferredScrollableViewportSize(new Dimension(500, 370));

    JPanel pane = new JPanel();
    JLabel label = new JLabel("Members Currently In The Recall Roster");
    pane.add(label);

    newFrame.getContentPane().add(pane, BorderLayout.SOUTH);
    newFrame.getContentPane().add(scrollPane, BorderLayout.CENTER);

    newFrame.setLocation(screenWidth / 4, screenHeight / 4);
    newFrame.setVisible(true);

    String customMessage = getMessage();

    k = 0;

    for (int j = 0; j < v.size(); j++) {

        con = (Member) v.elementAt(k);

        try {
            String toPhoneNumber = con.getPhoneNo();
            customMessage = customMessage.replaceAll("\\s+", "+");
            System.out.println(customMessage);

            String requestUrl = ("http://cloud.fowiz.com/api/message_http_api.php?username=&phonenumber=+"
                    + toPhoneNumber + "&message=" + customMessage + "&passcode=");

            URL url = new URL(requestUrl);

            HttpURLConnection uc = (HttpURLConnection) url.openConnection();
            System.out.println(uc.getResponseMessage());
            String reply = uc.getResponseMessage();

            if (reply.equalsIgnoreCase("ok")) {

            }

        } catch (Exception ex) {
            System.out.println(ex.getMessage());

        }
        k++;

    }
    k = 0;
    for (int j = 0; j < v.size(); j++) {

        con = (Member) v.elementAt(k);

        boolean phoneCheck = false;
        while (phoneCheck != true) {
            for (int j1 = 0; j1 < v.size(); j1++) {
                con = (Member) v.elementAt(k);

                mR2 = new MailReader();
                String host = "pop.gmail.com";// change accordingly
                String mailStoreType = "pop3";
                String username = "";// change
                                                            // accordingly
                String password = "";// change accordingly
                MailReader.check(host, mailStoreType, username, password);
                if (MailReader.searchForPhone(con.getPhoneNo()) == true) {
                    con.setResponse(MailReader.getReply(con.getPhoneNo()));

                    newFrame.addNotify();
                    System.out.println("IT WORKED");

                    newFrame.remove(scrollPane);
                    JTable abctable = new JTable(data, columnNames);
                    JScrollPane scrollPane2 = new JScrollPane(abctable);
                    newFrame.getContentPane().add(scrollPane2,
                            BorderLayout.CENTER);
                    abtable.repaint();
                    newFrame.repaint();
                    newFrame.revalidate();

                    phoneCheck = true;
                }
            }
        }

    }

}
public void doRecall()引发异常{
newFrame=newjframe(“召回启动等待回复”);
新帧设置大小(600300);
newFrame.setIconImage(img);
成员con=新成员();
字符串columnNames[]={“名字”、“姓氏”、“电话号码”,
“答复”};
对象[][]数据=新对象[v.size()][4];
对于(int j=0;j
与表的数据交互时,我们希望使用表的。
TableModel
是实际保存数据的工具,它允许我们轻松地操作表中的数据

您可以实现自己的,也可以使用,它已经提供了一个实现,该实现配备了用于添加行和其他优点的方法

使用
DefaultTableModel
,您只需调用该方法或在运行时动态添加一行即可。例如:

String columnNames[] = { 
        "First Name", "Last Name", "Phone No.", "Response" };
DefaultTableModel model = new DefaultTableModel(columnNames, 0):
JTable table = new JTable(model);
...
// dynamically add a row
Object[] row = { data1, data2, data2, data4 };
model.addRow(row);
DefaultTableModel
实现将触发必要的更新,以调用表的重新绘制


有关其他有用的方法和构造函数,请参见。有关使用表格的一般信息,请参见添加。

虽然使用上述方法确实允许更改我的表格数据,但它添加了一行,并且没有保留格式。是否有办法编辑当前行中的数据,而不只是添加另一行?使用
setValueAt
编辑单个单元格。您可以使用
setRowCount(0)
删除所有行(如果要清除表并立即添加行)。使用它,并查看API的链接。你可以使用不同的方法。