Java JSwing,在开始另一个操作之前,如何制作Jtable渲染?
我在一个普通的Jpanel上为我的按钮设置了一个和动作监听器,当我点击按钮时,它应该会弹出一个联系人窗口,然后逐个发送一条文本。它会打开一个窗口,并一直保持空白,直到发送完文本消息,即使在我的action listener中,它明确要求首先打开窗口Java JSwing,在开始另一个操作之前,如何制作Jtable渲染?,java,swing,jtable,actionlistener,Java,Swing,Jtable,Actionlistener,我在一个普通的Jpanel上为我的按钮设置了一个和动作监听器,当我点击按钮时,它应该会弹出一个联系人窗口,然后逐个发送一条文本。它会打开一个窗口,并一直保持空白,直到发送完文本消息,即使在我的action listener中,它明确要求首先打开窗口 else if (ae.getActionCommand() == "Initiate Recall") { int doneCheck = 0; if (doneCheck == 0){
else if (ae.getActionCommand() == "Initiate Recall") {
int doneCheck = 0;
if (doneCheck == 0){
oh.ViewAllMembers();
doneCheck = 1;
}
if (doneCheck == 1){
try {
oh.doRecall();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这是我的方法
public void doRecall() throws Exception {
String customMessage = getMessage();
boolean programOpen = true;
Member con = new Member();
Object data[][] = new Object[v.size()][8];
k = 0;
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.getNname();
data[j][3] = con.getEMail();
data[j][4] = con.getAddress();
data[j][5] = con.getPhoneNo();
data[j][6] = con.getresponse();
data[j][7] = con.getBday();
try {
String myPasscode = "*******";
String myUsername = "*******";
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) {
mR2 = new MailReader();
String host = "pop.gmail.com";// change accordingly
String mailStoreType = "pop3";
String username = "*********@gmail.com";// change
// accordingly
String password = "*******";// change accordingly
MailReader.check(host, mailStoreType, username, password);
if (MailReader.searchForPhone(con.getPhoneNo()) == true) {
System.out.println("IT WORKED");
phoneCheck = true;
}
}
}
}
public void doRecall()引发异常{
字符串customMessage=getMessage();
布尔编程开放=真;
成员con=新成员();
对象数据[][]=新对象[v.size()][8];
k=0;
对于(int j=0;j
这是我的观点联系方式
public void ViewAllMembers() {
newFrame = new JFrame("All Members In The Roster");
newFrame.setSize(600, 300);
newFrame.setIconImage(img);
Member con = new Member();
String columnNames[] = { "First Name", "Last Name", "Nickname",
"E Mail Address", "Address", "Phone No.", "response", "B'day" };
Object data[][] = new Object[v.size()][8];
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.getNname();
data[j][3] = con.getEMail();
data[j][4] = con.getAddress();
data[j][5] = con.getPhoneNo();
data[j][6] = con.getresponse();
data[j][7] = con.getBday();
k++;
}
k = 0;
JTable 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.show();
}
public void ViewAllMembers(){
newFrame=newjframe(“名册中的所有成员”);
新帧设置大小(600300);
newFrame.setIconImage(img);
成员con=新成员();
字符串columnNames[]={“名字”、“姓氏”、“昵称”,
“电子邮件地址”、“地址”、“电话号码”、“回复”、“B'day”};
对象数据[][]=新对象[v.size()][8];
对于(int j=0;j
问题:
else if (ae.getActionCommand() == "Initiate Recall") {
不要使用==
来比较字符串。了解==
检查两个对象是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这就是这里的问题所在。所以不是
if (fu == "bar") {
// do something
}
做
或者
下一步:
我猜这是一段长时间运行的代码——你永远不会告诉我们这是做什么的(??)。如果是这样的话,它会使您的整个Swing GUI处于休眠状态,从而使其无响应。也许它需要在后台线程上运行
doneCheck = 1;
}
if (doneCheck == 1){
try {
oh.doRecall();
}
oh.doRecall()
是否显示您的JTable?如果是这样,或者不是这样,您没有向我们很好地解释您的代码,但似乎假设我们可以理解未显示的代码和概念。现实检查:我们不能
编辑
- 您的
代码应该在后台线程中调用,例如使用SwingWorker(Swing中的GoogledoRecall()
),因为它会占用Swing事件线程,阻止其他代码显示。这是您的主要问题,本教程将帮助您了解如何解决它并发性)
- 您似乎显示了多个JFrames,这是一个常见的Swing新手错误,您需要修复。如果需要显示从属窗口,请显示一个对话框(如JDialog),或者不显示子窗口,并使用CardLayout交换视图
- 同样,不要使用
来比较字符串==
- 不要调用不推荐使用的方法,例如
。它们被弃用是有原因的,JavaAPI将告诉您应该使用的替代方案JFrame#show()
像
if ("Initiate Recall".equalsIgnoreCase(ae.getActionCommand())) {
// viewAllMembers method name should begin with a lower-case letter
oh.viewAllMembers();
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
oh.doRecall();
return null;
}
@Override
protected void done() {
try {
get();
} catch (InterruptedException | ExecutionException e) {
// do something with any exceptions here
e.printStackTrace();
}
}
};
worker.execute();
}
if(“启动调用”.equalsIgnoreCase(ae.getActionCommand())){
//viewAllMembers方法名称应以小写字母开头
哦,查看所有成员();
SwingWorker worker=新SwingWorker(){
int doneCheck = 0;
if (doneCheck == 0){
oh.ViewAllMembers();
doneCheck = 1;
}
if (doneCheck == 1){
try {
oh.doRecall();
}
if ("Initiate Recall".equalsIgnoreCase(ae.getActionCommand())) {
// viewAllMembers method name should begin with a lower-case letter
oh.viewAllMembers();
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
oh.doRecall();
return null;
}
@Override
protected void done() {
try {
get();
} catch (InterruptedException | ExecutionException e) {
// do something with any exceptions here
e.printStackTrace();
}
}
};
worker.execute();
}