[英]Update Jtable content in the gui without reinitating the method to redraw the table?
我在這里提供的方法應該創建一個新表,執行重新調用,然后使用聯系人員收到的消息來更新該表。 除了收到的消息外,一切正常。 我什至可以再次單擊按鈕來啟動召回,然后它會更新表以包括收到的消息,但是我添加到代碼中的任何內容似乎都不會自動更新表。 正如您在這里看到的,我什至嘗試完全重繪表格,但是這也不起作用。 真正使消息顯示出來的唯一方法是重新啟動召回。
我嘗試過重新驗證和重新粉刷,但是這些似乎不起作用。
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;
}
}
}
}
}
與表的數據進行交互時,我們要使用表的TableModel
。 TableModel
實際上是保存數據的工具,它使我們能夠輕松地處理表中的數據。
您既可以實現自己的AbstractTableModel
也可以使用DefaultTableModel
,后者已經提供了實現,並帶有用於添加行和其他東西的方法。
使用DefaultTableModel
,您可以簡單地調用方法addRow(Object[])
或addRow(Vector)
在運行時動態添加行。 例如:
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
實現將觸發必要的更新以調用表的重新繪制。
有關其他有用的方法和構造函數 ,請參見DefaultTableModel API 。 添加有關使用表的一般信息,請參見如何使用表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.