gpt4 book ai didi

java - 更新gui中的Jtable内容而不重新启动重绘表格的方法?

转载 作者:行者123 更新时间:2023-12-02 05:23:06 25 4
gpt4 key购买 nike

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

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

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其他有用的方法和构造函数。添加见How to Use Tables有关使用表格的一般信息。

关于java - 更新gui中的Jtable内容而不重新启动重绘表格的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26327930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com